X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Flog.c;h=1a5e6b5a86026e020367252208be0ea56a2ac55f;hb=e07c9107593d131eeb0f57cfd908e0e01be37010;hp=ff6aac5f507eceb7ac4ebc5b9a6d1e7dd00d3490;hpb=27a9c86e28cd54204d12517a94b338b30805c747;p=yaz-moved-to-github.git diff --git a/src/log.c b/src/log.c index ff6aac5..1a5e6b5 100644 --- a/src/log.c +++ b/src/log.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2004, Index Data + * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: log.c,v 1.17 2004-11-23 14:10:47 heikki Exp $ + * $Id: log.c,v 1.25 2005-06-25 15:46:04 adam Exp $ */ /** @@ -34,7 +34,8 @@ #include #include #include -#include +#include +#include static NMEM_MUTEX log_mutex = 0; static int mutex_init_flag = 0; /* not yet initialized */ @@ -82,10 +83,10 @@ static struct { { YLOG_LOG, "log" }, { YLOG_ERRNO, ""}, { YLOG_MALLOC, "malloc"}, - /* { YLOG_APP, "app" }, */ + { YLOG_APP, "app" }, { YLOG_NOTIME, "notime" }, - /* { YLOG_APP2, "app2" }, */ - /* { YLOG_APP3, "app3" }, */ + { YLOG_APP2, "app2" }, + { YLOG_APP3, "app3" }, { YLOG_ALL, "all" }, { YLOG_FLUSH, "flush" }, { YLOG_LOGLVL, "loglevel" }, @@ -117,11 +118,11 @@ void yaz_log_init_file (const char *fname) init_mutex(); if (fname) { - strncpy(l_fname, fname, sizeof(l_fname)-1); - l_fname[sizeof(l_fname)-1] = '\0'; + strncpy(l_fname, fname, sizeof(l_fname)-1); + l_fname[sizeof(l_fname)-1] = '\0'; } else - l_fname[0] = '\0'; + l_fname[0] = '\0'; yaz_log_reopen(); } @@ -133,9 +134,15 @@ void yaz_log_reopen(void) if (!l_file) l_file = stderr; if (!*l_fname) - new_file = stderr; + new_file = stderr; else if (!(new_file = fopen(l_fname, "a"))) + { + new_file=l_file; + l_file=stderr; /* just to be sure we don't rotate logs and recurse */ + yaz_log(YLOG_WARN|YLOG_ERRNO,"Could not open log file '%s'",l_fname); + l_file=new_file; /* restore to old value, probably stderr as well */ return; + } if (l_file != stderr) { fclose (l_file); @@ -167,6 +174,8 @@ static void rotate_log() void yaz_log_init_level (int level) { + if (!mutex_init_flag) + init_mutex(); if ( (l_level & YLOG_FLUSH) != (level & YLOG_FLUSH) ) { l_level = level; @@ -194,7 +203,7 @@ void yaz_log_init_level (int level) void yaz_log_init_prefix (const char *prefix) { if (prefix && *prefix) - sprintf(l_prefix, "%.511s ", prefix); + sprintf(l_prefix, "%.511s ", prefix); else *l_prefix = 0; } @@ -202,7 +211,7 @@ void yaz_log_init_prefix (const char *prefix) void yaz_log_init_prefix2 (const char *prefix) { if (prefix && *prefix) - sprintf(l_prefix2, "%.511s ", prefix); + sprintf(l_prefix2, "%.511s ", prefix); else *l_prefix2 = 0; } @@ -254,7 +263,7 @@ void yaz_log(int level, const char *fmt, ...) int flen; if (!(level & l_level)) - return; + return; if (!mutex_init_flag) init_mutex(); if (!l_file) @@ -271,15 +280,15 @@ void yaz_log(int level, const char *fmt, ...) *flags = '\0'; for (i = 0; level && mask_names[i].name; i++) - if ( mask_names[i].mask & level) - { - if (*mask_names[i].name && mask_names[i].mask && + if ( mask_names[i].mask & level) + { + if (*mask_names[i].name && mask_names[i].mask && mask_names[i].mask != YLOG_ALL) { - sprintf(flags + strlen(flags), "[%s]", mask_names[i].name); - level &= ~mask_names[i].mask; + sprintf(flags + strlen(flags), "[%s]", mask_names[i].name); + level &= ~mask_names[i].mask; } - } + } va_start(ap, fmt); #ifdef WIN32 _vsnprintf(buf, sizeof(buf)-1, fmt, ap); @@ -304,16 +313,16 @@ void yaz_log(int level, const char *fmt, ...) ti = time(0); tim = localtime(&ti); if (l_level & YLOG_NOTIME) - tbuf[0] = '\0'; + tbuf[0] = '\0'; else - strftime(tbuf, TIMEFORMAT_LEN-1, l_actual_format, tim); + strftime(tbuf, TIMEFORMAT_LEN-1, l_actual_format, tim); tbuf[TIMEFORMAT_LEN-1] = '\0'; fprintf(l_file, "%s %s%s %s%s\n", tbuf, l_prefix, flags, l_prefix2, buf); if (l_level & (YLOG_FLUSH|YLOG_DEBUG) ) fflush(l_file); if (end_hook_func) - (*end_hook_func)(o_level, buf, end_hook_info); + (*end_hook_func)(o_level, buf, end_hook_info); } void yaz_log_time_format(const char *fmt) @@ -354,6 +363,8 @@ static char *clean_name(const char *name, int len, char *namebuf, int buflen) static int define_module_bit(const char *name) { int i; + if (!mutex_init_flag) + init_mutex(); for (i = 0; mask_names[i].name; i++) ; if ( (i>=MAX_MASK_NAMES) || (next_log_bit >= 1<<31 )) @@ -374,6 +385,8 @@ int yaz_log_module_level(const char *name) int i; char clean[255]; char *n = clean_name(name, strlen(name), clean, sizeof(clean)); + if (!mutex_init_flag) + init_mutex(); for (i = 0; mask_names[i].name; i++) if (0==strcmp(n,mask_names[i].name)) { @@ -396,15 +409,13 @@ int yaz_log_mask_str_x (const char *str, int level) { const char *p; int i; - int found; - int negated; char clean[255] = ""; char *n = clean; while (*str) { - found = 0; - negated=0; + int found = 0; + int negated = 0; for (p = str; *p && *p != ','; p++) ; if (*str=='-') @@ -412,7 +423,7 @@ int yaz_log_mask_str_x (const char *str, int level) negated=1; str++; } - if (isdigit(*str)) + if (isdigit(*(unsigned char *) str)) { level = atoi (str); found = 1; @@ -441,3 +452,11 @@ int yaz_log_mask_str_x (const char *str, int level) } return level; } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +