diff --git a/src/example/example.c b/src/example/example.c new file mode 100644 index 0000000..640b405 --- /dev/null +++ b/src/example/example.c @@ -0,0 +1,53 @@ +#include +#include "../log.h" + +extern const char *level_strings[]; + +void callback1(log_Event *ev) +{ + char logline[128]; + snprintf(logline, 128, "%-5s %s:%d: ", + level_strings[ev->level], ev->file, ev->line); + vsnprintf(logline, 128, ev->fmt, ev->ap); + printf("%s: %s\n", __func__, logline); +} + +void callback2(log_Event *ev) +{ + char logline[128]; + snprintf(logline, 128, "%-5s %s:%d: ", + level_strings[ev->level], ev->file, ev->line); + vsnprintf(logline, 128, ev->fmt, ev->ap); + printf("%s: %s\n", __func__, logline); +} + +int main() +{ + log_trace("hello"); + log_debug("hello"); + log_info("hello"); + log_warn("hello"); + log_error("hello"); + log_fatal("hello"); + log_debug("============== update loglevel to FATAL ============="); + log_set_level(LOG_FATAL); + log_trace("hello"); + log_debug("hello"); + log_info("hello"); + log_warn("hello"); + log_error("hello"); + log_fatal("hello"); + log_debug("===================== init log ====================="); + log_add_callback(callback1, "progname", LOG_TRACE); + log_add_callback(callback2, "progname", LOG_TRACE); + log_trace("hello"); + log_debug("hello"); + log_info("hello"); + log_warn("hello"); + log_error("hello"); + log_fatal("hello"); + log_debug("============ update loglevels of callbacks ========"); + log_set_level_callback(callback1, LOG_FATAL); + log_set_level_callback(callback2, LOG_WARN); + return 0; +} \ No newline at end of file diff --git a/src/log.c b/src/log.c index 1a7626e..f25f095 100644 --- a/src/log.c +++ b/src/log.c @@ -39,7 +39,7 @@ static struct { } L; -static const char *level_strings[] = { +const char *level_strings[] = { "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" }; @@ -122,6 +122,17 @@ int log_add_callback(log_LogFn fn, void *udata, int level) { return -1; } +int log_set_level_callback(log_LogFn fn, int level) { + for (int i = 0; i < MAX_CALLBACKS; i++) { + if (L.callbacks[i].fn == fn) { + L.callbacks[i].level = level; + return 0; + } + } + return -1; +} + + int log_add_fp(FILE *fp, int level) { return log_add_callback(file_callback, fp, level); diff --git a/src/log.h b/src/log.h index b1fae24..c9fc906 100644 --- a/src/log.h +++ b/src/log.h @@ -42,6 +42,7 @@ void log_set_lock(log_LockFn fn, void *udata); void log_set_level(int level); void log_set_quiet(bool enable); int log_add_callback(log_LogFn fn, void *udata, int level); +int log_set_level_callback(log_LogFn fn, int level); int log_add_fp(FILE *fp, int level); void log_log(int level, const char *file, int line, const char *fmt, ...);