A simple logging library implemented in C99
log.c and log.h should be dropped into an existing project and compiled along with it. The library provides 6 function-like macros for logging:
log_trace(const char *fmt, ...);
log_debug(const char *fmt, ...);
log_info(const char *fmt, ...);
log_warn(const char *fmt, ...);
log_error(const char *fmt, ...);
log_fatal(const char *fmt, ...);
Each function takes a printf format string followed by additional arguments:
log_trace("Hello %s", "world")
Resulting in a line with the given format printed to stderr:
20:18:26 TRACE src/main.c:11: Hello world
Quiet-mode can be enabled by passing true
to the log_set_quiet()
function.
While this mode is enabled the library will not output anything to stderr
, but
will continue to write to files and callbacks if any are set.
The current logging level can be set by using the log_set_level()
function.
All logs below the given level will not be written to stderr
. By default the
level is LOG_TRACE
, such that nothing is ignored.
One or more file pointers where the log will be written can be provided to the
library by using the log_add_fp()
function. The data written to the file
output is of the following format:
2047-03-11 20:18:26 TRACE src/main.c:11: Hello world
Any messages below the given level
are ignored. If the library failed to add a
file pointer a value less-than-zero is returned.
One or more callback functions which are called with the log data can be
provided to the library by using the log_add_callback()
function. A callback
function is passed a log_Event
structure containing the line
number,
filename
, fmt
string, va
printf va_list, level
and the given udata
.
If the log will be written to from multiple threads a lock function can be set.
The function is passed the boolean true
if the lock should be acquired or
false
if the lock should be released and the given udata
value.
Returns the name of the given log level as a string.
If the library is compiled with -DLOG_USE_COLOR
ANSI color escape codes will
be used when printing.
If the library is compiled with -DLOG_LOC_ALIGN
, the width of the log line
reserved for the location of in the file (e.g. src/main.c:238) will be
constant, either padded or truncated depending on the size of the file.
The actual width is defined with the macro LOG_LOC_LEN
and defaults to 16.
If needed, this width can be overriden to n
by giving the -DLOG_LOC_LEN=n
flag to the compiler.
If the library is compiled with -DLOG_PID
, each log line will be show the PID
of the calling process. You might not use this if your program is performance-
critical and particularly verbose, as each log line will call the getpid(2)
syscall.
This library is free software; you can redistribute it and/or modify it under the terms of the MIT license. See LICENSE for details.