/*
- * 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.45 2007-01-03 08:42:15 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;
+ }
}
}
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);