* Copyright (C) 1995-2006, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: log.c,v 1.43 2006-11-27 14:09:32 adam Exp $
+ * $Id: log.c,v 1.44 2007-01-01 22:39:08 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;
+ }
}
}