/*
- * Copyright (C) 1995-2006, Index Data ApS
+ * Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: log.c,v 1.42 2006-10-09 11:21:37 adam Exp $
+ * $Id: log.c,v 1.46 2007-02-05 17:51:48 adam Exp $
*/
/**
static int l_level = YLOG_DEFAULT_LEVEL;
-enum l_file_type { use_stderr, use_none, use_file };
+enum l_file_type { use_stderr, use_none, use_file };
static enum l_file_type yaz_file_type = use_stderr;
static FILE *yaz_global_log_file = NULL;
static void rotate_log(const char *cur_fname)
{
int i;
+
#ifdef WIN32
/* windows can't rename a file if it is open */
- fclose(yaz_global_log_file);
- yaz_global_log_file = 0;
+ yaz_log_close();
#endif
for (i = 0; i<9; i++)
{
char new_filename[512];
static char cur_filename[512] = "";
+ if (yaz_file_type != use_file)
+ return;
+
if (l_fname && *l_fname)
{
strftime(new_filename, sizeof(new_filename)-1, l_fname, tm);
}
}
- if (l_max_size > 0 && yaz_global_log_file && yaz_file_type == use_file)
+ if (l_max_size > 0 && yaz_global_log_file)
{
long flen = ftell(yaz_global_log_file);
if (flen > l_max_size)
force = 1;
}
}
- if (force && yaz_file_type == use_file && *cur_filename)
+ if (force && *cur_filename)
{
+ FILE *new_file;
+#ifdef WIN32
yaz_log_close();
- yaz_global_log_file = fopen(cur_filename, filemode);
- if (l_level & YLOG_FLUSH)
- setvbuf(yaz_global_log_file, 0, _IONBF, 0);
+#endif
+ new_file = fopen(cur_filename, filemode);
+ if (new_file)
+ {
+ yaz_log_close();
+ yaz_global_log_file = new_file;
+ if (l_level & YLOG_FLUSH)
+ setvbuf(yaz_global_log_file, 0, _IONBF, 0);
+ }
+ else
+ {
+ /* disable log rotate */
+ l_max_size = 0;
+ }
}
}
level &= ~mask_names[i].mask;
}
}
-
- if (l_level & YLOG_NOTIME)
- tbuf[0] = '\0';
- else
- yaz_strftime(tbuf, TIMEFORMAT_LEN-1, l_actual_format, tm);
- tbuf[TIMEFORMAT_LEN-1] = '\0';
-
- fprintf(file, "%s %s%s %s%s\n", tbuf, l_prefix, flags, l_prefix2,
+
+ tbuf[0] = '\0';
+ if (!(l_level & YLOG_NOTIME))
+ {
+ yaz_strftime(tbuf, TIMEFORMAT_LEN-2, l_actual_format, tm);
+ tbuf[TIMEFORMAT_LEN-2] = '\0';
+ }
+ if (tbuf[0])
+ strcat(tbuf, " ");
+ fprintf(file, "%s%s%s %s%s\n", tbuf, l_prefix, flags, l_prefix2,
log_message);
if (l_level & YLOG_FLUSH)
fflush(file);
nmem_mutex_leave(log_mutex);
return mask_names[i].mask;
}
- if ( (i>=MAX_MASK_NAMES) || (next_log_bit >= 1<<31 ))
+ if ( (i>=MAX_MASK_NAMES) || (next_log_bit & (1<<31) ))
{
nmem_mutex_leave(log_mutex);
yaz_log(YLOG_WARN, "No more log bits left, not logging '%s'", name);