/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data
+ * Copyright (C) 1995-2010 Index Data
* See the file LICENSE for details.
*/
#include <errno.h>
#include <time.h>
#include <yaz/errno.h>
+#include <yaz/thread_id.h>
#include <yaz/log.h>
#include <yaz/snprintf.h>
#include <yaz/xmalloc.h>
-#define HAS_STRERROR 1
-
-
-#if HAS_STRERROR
-
-#else
-char *strerror(int n)
-{
- extern char *sys_errlist[];
- return sys_errlist[n];
-}
-
-#endif
-
-
static int l_level = YLOG_DEFAULT_LEVEL;
enum l_file_type { use_stderr, use_none, use_file };
static char l_old_default_format[] = "%H:%M:%S-%d/%m";
static char l_new_default_format[] = "%Y%m%d-%H%M%S";
#define TIMEFORMAT_LEN 50
+#define TID_LEN 30
static char l_custom_format[TIMEFORMAT_LEN] = "";
static char *l_actual_format = l_old_default_format;
{ YLOG_LOG, "log" },
{ YLOG_ERRNO, ""},
{ YLOG_MALLOC, "malloc"},
- { YLOG_APP, "app" },
+ { YLOG_TID, "tid" },
+ { YLOG_APP, "app" },
{ YLOG_NOTIME, "notime" },
{ YLOG_APP2, "app2" },
{ YLOG_APP3, "app3" },
void log_event_start(void (*func)(int, const char *, void *), void *info)
{
- start_hook_func = func;
- start_hook_info = info;
+ start_hook_func = func;
+ start_hook_info = info;
}
void log_event_end(void (*func)(int, const char *, void *), void *info)
{
- end_hook_func = func;
- end_hook_info = info;
+ end_hook_func = func;
+ end_hook_info = info;
}
static void yaz_log_open_check(struct tm *tm, int force, const char *filemode)
if (file)
{
char tbuf[TIMEFORMAT_LEN];
+ char tid[TID_LEN];
char flags[1024];
int i;
}
if (tbuf[0])
strcat(tbuf, " ");
- fprintf(file, "%s%s%s %s%s\n", tbuf, l_prefix, flags, l_prefix2,
+ tid[0] = '\0';
+
+ if (l_level & YLOG_TID)
+ {
+ yaz_thread_id_cstr(tid, sizeof(tid)-1);
+ if (tid[0])
+ strcat(tid, " ");
+ }
+
+ fprintf(file, "%s%s%s%s %s%s\n", tbuf, l_prefix, tid, flags, l_prefix2,
log_message);
if (l_level & YLOG_FLUSH)
fflush(file);
else
{
char clean[509];
- char *n = clean_name(str, p-str, clean, sizeof(clean));
+ char *n = clean_name(str, (size_t) (p - str), clean, sizeof(clean));
int mask = define_module_bit(n);
if (!mask)
level = 0; /* 'none' clears them all */