From ba8e479c356729d0697b7a784e2d63e943b6cfb6 Mon Sep 17 00:00:00 2001 From: Darkvater Date: Fri, 7 Mar 2014 00:23:15 +0800 Subject: [PATCH] log: enhance setting loglevels Enable logging level settings such as 'log_level=error' to set all levels to error, or 'log_level=error,ssdp=maxdebug' to override only one category --- log.c | 72 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/log.c b/log.c index dc1d723..f80e6d4 100644 --- a/log.c +++ b/log.c @@ -29,10 +29,10 @@ #include "log.h" static FILE *log_fp = NULL; -static int default_log_level = E_WARN; +static const int _default_log_level = E_WARN; int log_level[L_MAX]; -char *facility_name[] = { +const char *facility_name[] = { "general", "artwork", "database", @@ -45,7 +45,7 @@ char *facility_name[] = { 0 }; -char *level_name[] = { +const char *level_name[] = { "off", // E_OFF "fatal", // E_FATAL "error", // E_ERROR @@ -63,60 +63,58 @@ log_close(void) fclose(log_fp); } +int find_matching_name(const char* str, const char* names[]) { + if (str == NULL) return -1; + + const char* start = strpbrk(str, ",="); + int level, c = (start != NULL) ? start - str : strlen(str); + for (level = 0; names[level] != 0; level++) { + if (!(strncasecmp(names[level], str, c))) + return level; + } + return -1; +} + int log_init(const char *fname, const char *debug) { int i; FILE *fp; - short int log_level_set[L_MAX]; + + int level = find_matching_name(debug, level_name); + int default_log_level = (level == -1) ? _default_log_level : level; + + for (i=0; i