r12798: print timestamps into the log file, this is not nice code,
authorStefan Metzmacher <metze@samba.org>
Mon, 9 Jan 2006 18:25:06 +0000 (18:25 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:49:56 +0000 (13:49 -0500)
but it works for now

metze

source/include/debug.h
source/lib/debug.c

index ccd1c90040e61c346be7b8551f26c9e6e16cf176..eaf53bad6af7425db9953f13a4ac0434df1db741 100644 (file)
@@ -35,15 +35,24 @@ struct debug_ops {
        void (*log_task_id)(int fd);
 };
 
+void do_debug_header(int level);
 void do_debug(const char *, ...) PRINTF_ATTRIBUTE(1,2);
 
 extern int DEBUGLEVEL;
 
 #define DEBUGLVL(level) ((level) <= DEBUGLEVEL)
-#define DEBUG(level, body) do { if (DEBUGLVL(level)) do_debug body; } while (0)
-#define DEBUGADD(level, body) DEBUG(level, body)
+#define _DEBUG(level, body, header) do { \
+       if (DEBUGLVL(level)) { \
+               if (header) { \
+                       do_debug_header(level); \
+               } \
+               do_debug body; \
+       } \
+} while (0)
+#define DEBUG(level, body) _DEBUG(level, body, True)
+#define DEBUGADD(level, body) _DEBUG(level, body, False)
 #define DEBUGC(class, level, body) DEBUG(level, body)
-#define DEBUGADDC(class, level, body) DEBUG(level, body)
+#define DEBUGADDC(class, level, body) DEBUGADD(level, body)
 #define DEBUGTAB(n) do_debug_tab(n)
 
 enum debug_logtype {DEBUG_STDOUT = 0, DEBUG_FILE = 1, DEBUG_STDERR = 2};
index a775c46854776e44ac0a137a7c377da2bb2f534c..d0288f7ddc25d1e7e0b6985abfa5168e778f0268 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "system/time.h"
 #include "dynconfig.h"
 
 /* this global variable determines what messages are printed */
@@ -40,6 +41,16 @@ static struct {
        const char *prog_name;
 } state;
 
+/*
+  the backend for debug messages. Note that the DEBUG() macro has already
+  ensured that the log level has been met before this is called
+*/
+void do_debug_header(int level)
+{
+       log_timestring(level);
+       log_task_id();
+}
+
 /*
   the backend for debug messages. Note that the DEBUG() macro has already
   ensured that the log level has been met before this is called
@@ -59,8 +70,6 @@ void do_debug(const char *format, ...)
        vasprintf(&s, format, ap);
        va_end(ap);
 
-       log_task_id();
-       
        write(state.fd, s, strlen(s));
        free(s);
 }
@@ -153,6 +162,24 @@ void print_suspicious_usage(const char* from, const char* info)
        }
 }
 
+void log_timestring(int level)
+{
+       char *t = NULL;
+       char *s = NULL;
+
+       if (state.logtype != DEBUG_FILE) return;
+
+       t = timestring(NULL, time(NULL));
+       if (!t) return;
+
+       asprintf(&s, "[%s, %d]\n", t, level);
+       talloc_free(t);
+       if (!s) return;
+
+       write(state.fd, s, strlen(s));
+       free(s);
+}
+
 uint32_t get_task_id(void)
 {
        if (debug_handlers.ops.get_task_id) {
@@ -167,6 +194,7 @@ void log_task_id(void)
                debug_handlers.ops.log_task_id(state.fd);
        }
 }
+
 /*
   register a set of debug handlers. 
 */