1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <stdarg.h>
20: #include <stdio.h>
21: #include <string.h>
22: #include <syslog.h>
23: #include <unistd.h>
24: #include "dbg_log.h"
25: #include "nscd.h"
26:
27:
28:
29:
30:
31: static char *logfilename;
32: FILE *dbgout;
33: int debug_level;
34:
35: void
36: set_logfile (const char *logfile)
37: {
38: logfilename = strdup (logfile);
39: }
40:
41: int
42: init_logfile (void)
43: {
44: if (logfilename)
45: {
46: dbgout = fopen64 (logfilename, "a");
47: return dbgout == NULL ? 0 : 1;
48: }
49: return 1;
50: }
51:
52: void
53: dbg_log (const char *fmt,...)
54: {
55: va_list ap;
56: char msg[512], msg2[512];
57:
58: va_start (ap, fmt);
59: vsnprintf (msg2, sizeof (msg), fmt, ap);
60:
61: if (debug_level > 0)
62: {
63: snprintf (msg, sizeof (msg), "%d: %s%s", getpid (), msg2,
64: msg2[strlen (msg2) - 1] == '\n' ? "" : "\n");
65: if (dbgout)
66: {
67: fputs (msg, dbgout);
68: fflush (dbgout);
69: }
70: else
71: fputs (msg, stderr);
72: }
73: else
74: syslog (LOG_NOTICE, "%d %s", getpid (), msg2);
75:
76: va_end (ap);
77: }