Author: metze Date: 2006-01-09 18:25:06 +0000 (Mon, 09 Jan 2006) New Revision: 12798
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12798 Log: print timestamps into the log file, this is not nice code, but it works for now metze Modified: branches/SAMBA_4_0/source/include/debug.h branches/SAMBA_4_0/source/lib/debug.c Changeset: Modified: branches/SAMBA_4_0/source/include/debug.h =================================================================== --- branches/SAMBA_4_0/source/include/debug.h 2006-01-09 17:43:48 UTC (rev 12797) +++ branches/SAMBA_4_0/source/include/debug.h 2006-01-09 18:25:06 UTC (rev 12798) @@ -35,15 +35,24 @@ 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}; Modified: branches/SAMBA_4_0/source/lib/debug.c =================================================================== --- branches/SAMBA_4_0/source/lib/debug.c 2006-01-09 17:43:48 UTC (rev 12797) +++ branches/SAMBA_4_0/source/lib/debug.c 2006-01-09 18:25:06 UTC (rev 12798) @@ -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 */ @@ -44,6 +45,16 @@ 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 +*/ void do_debug(const char *format, ...) { va_list ap; @@ -59,8 +70,6 @@ vasprintf(&s, format, ap); va_end(ap); - log_task_id(); - write(state.fd, s, strlen(s)); free(s); } @@ -153,6 +162,24 @@ } } +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 @@ debug_handlers.ops.log_task_id(state.fd); } } + /* register a set of debug handlers. */
