Udipe 1.0
Solving the riddle of high-throughput UDP
Loading...
Searching...
No Matches
log_to_tempfile.c

This example demonstrates a non-default udipe_log_config_t setup that enables TRACE logging and leverages a user-defined udipe_log_callback_t to write logs to a temporary file instead of stderr.

#include <udipe/context.h>
#include <udipe/log.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void log_to_tempfile(void* context,
const char location[],
const char message[]) {
FILE* tempfile = (FILE*)context;
int result = fprintf(tempfile,
"%s from %s: %s\n",
udipe_log_level_name(level), location, message);
if (result < 0) {
perror("Failed to write log to tempfile");
exit(EXIT_FAILURE);
}
}
int main() {
// Set up a temporary file
char tempname[] = "/tmp/udipe-log_to_tempfile.XXXXXX";
int tempfd = mkstemp(tempname);
if (tempfd < 0) {
perror("Failed to create temporary file");
exit(EXIT_FAILURE);
}
fprintf(stderr, "Logs will be written to %s", tempname);
FILE* tempfile = fdopen(tempfd, "w+");
if (!tempfile) {
perror("Failed to open temporary file");
exit(EXIT_FAILURE);
}
// Start from the default libudipe configuration
udipe_config_t config = { 0 };
// Set up maximally verbose logging to the temporary file
config.log = (udipe_log_config_t){
.callback = log_to_tempfile,
.context = (void*)tempfile
};
// Set up the upipe context
udipe_context_t* context = udipe_initialize(config);
assert(context);
// Finalize the libudipe context
udipe_finalize(context);
// Close the temporary file
if(fclose(tempfile) < 0) {
perror("Failed to close temporary file");
exit(EXIT_FAILURE);
}
return 0;
}
Core libudipe context.
struct udipe_context_s udipe_context_t
Definition context.h:65
UDIPE_PUBLIC UDIPE_NON_NULL_ARGS void udipe_finalize(udipe_context_t *context)
UDIPE_NODISCARD UDIPE_NON_NULL_RESULT UDIPE_PUBLIC udipe_context_t * udipe_initialize(udipe_config_t config)
Logging configuration.
enum udipe_log_level_e udipe_log_level_t
@ UDIPE_TRACE
Definition log.h:45
UDIPE_NODISCARD UDIPE_NON_NULL_RESULT UDIPE_PUBLIC const char * udipe_log_level_name(udipe_log_level_t level)
struct udipe_log_config_s udipe_log_config_t
Definition context.h:35
udipe_log_config_t log
Definition context.h:42
udipe_log_level_t min_level
Definition log.h:184