X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Flog.c;h=1a5e6b5a86026e020367252208be0ea56a2ac55f;hb=b7c6d3740131ba03800c5c2cc935dc2626d12bb3;hp=e8aa1a83e5e36865c6bf345a2d5b7a57da3cfb4f;hpb=905df6869e5ad8ab9f34590cce771fe50c444473;p=yaz-moved-to-github.git diff --git a/src/log.c b/src/log.c index e8aa1a8..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.19 2004-12-30 00:11:00 adam Exp $ + * $Id: log.c,v 1.25 2005-06-25 15:46:04 adam Exp $ */ /** @@ -83,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" }, @@ -118,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(); } @@ -134,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); @@ -168,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; @@ -195,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; } @@ -203,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; } @@ -255,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) @@ -272,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); @@ -305,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) @@ -355,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 )) @@ -375,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)) { @@ -440,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 + */ +