From: Dennis Schafroth Date: Tue, 22 May 2012 15:15:27 +0000 (+0200) Subject: Attempt to enable log level on modules as well, without breaking existing behavior X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=commitdiff_plain;h=68ef881e1887c2646cd97a9c530c2d355a4e3869 Attempt to enable log level on modules as well, without breaking existing behavior --- diff --git a/src/log.c b/src/log.c index 673418b..7d03b8b 100644 --- a/src/log.c +++ b/src/log.c @@ -60,6 +60,8 @@ static char l_old_default_format[] = "%H:%M:%S-%d/%m"; static char l_new_default_format[] = "%Y%m%d-%H%M%S"; #define TIMEFORMAT_LEN 50 #define TID_LEN 30 +#define YLOG_LEVEL_MASK (YLOG_FATAL | YLOG_WARN | YLOG_LOG | YLOG_DEBUG ) + static char l_custom_format[TIMEFORMAT_LEN] = ""; static char *l_actual_format = l_old_default_format; @@ -98,6 +100,7 @@ static struct { }; static unsigned int next_log_bit = YLOG_LAST_BIT<<1; /* first dynamic bit */ +static unsigned int module_logs = YLOG_LAST_BIT<<1; /* first dynamic bit */ static void internal_log_init(void) { @@ -438,6 +441,9 @@ static void yaz_log_to_file(int level, const char *log_message) } } +static int is_module_log(int level) { + return level >= module_logs; +} void yaz_log(int level, const char *fmt, ...) { va_list ap; @@ -448,6 +454,16 @@ void yaz_log(int level, const char *fmt, ...) internal_log_init(); if (!(level & l_level)) return; + /* Modules without log level should log (as before) */ + /* if there exists a log level as well this should be respected. */ + if (is_module_log(level)) { + int module_log_level; + module_log_level = level & YLOG_LEVEL_MASK; + if (module_log_level != 0) { + if (!(module_log_level & l_level)) + return; + } + } va_start(ap, fmt); /* 30 is enough for our 'rest of output' message */