Call syslog with "%s" as format.
[nfs-utils.git] / utils / statd / log.c
1 /*
2  * Copyright (C) 1995 Olaf Kirch
3  * Modified by Jeffrey A. Uphoff, 1995, 1997, 1999.
4  * Modified by H.J. Lu, 1998.
5  *
6  * NSM for Linux.
7  */
8
9 /* 
10  *      log.c - logging functions for lockd/statd
11  *      260295   okir   started with simply syslog logging.
12  */
13
14 #include "config.h"
15
16 #include <syslog.h>
17 #include <unistd.h>
18 #include <stdio.h>
19 #include <string.h>
20 #include <stdarg.h>
21 #include <time.h>
22 #include <sys/types.h>
23 #include "log.h"
24
25 static char     progname[256];
26 static pid_t    mypid;
27                                 /* Turns on logging to console/stderr. */
28 static int      opt_debug = 0;  /* Will be command-line option, eventually */
29
30 void
31 log_init(char *name)
32 {
33     char        *sp;
34
35     openlog(name, LOG_PID, LOG_LOCAL5);
36     if ((sp = strrchr(name, '/')) != NULL)
37         name = ++sp;
38     strncpy(progname, name, sizeof (progname) - 1);
39     progname[sizeof (progname) - 1] = '\0';
40     mypid = getpid();
41 }
42
43 void
44 log_background(void)
45 {
46     /* NOP */
47 }
48
49 void
50 log_enable(int level)
51 {
52     opt_debug = 1;
53 }
54
55 int
56 log_enabled(int level)
57 {
58     return opt_debug;
59 }
60
61 void
62 die(char *fmt, ...)
63 {
64     char        buffer[1024];
65     va_list     ap;
66
67     va_start(ap, fmt);
68     vsnprintf (buffer, 1024, fmt, ap);
69     va_end(ap);
70     buffer[1023]=0;
71
72     log(L_FATAL, "%s", buffer);
73
74 #ifndef DEBUG
75     exit (2);
76 #else
77     abort();    /* make a core */
78 #endif
79 }
80
81 void
82 log(int level, char *fmt, ...)
83 {
84     char        buffer[1024];
85     va_list     ap;
86
87     va_start(ap, fmt);
88     vsnprintf (buffer, 1024, fmt, ap);
89     va_end(ap);
90     buffer[1023]=0;
91
92     if (level < L_DEBUG) {
93         syslog(level, "%s", buffer);
94     }
95
96     if (opt_debug) {
97         time_t          now;
98         struct tm *     tm;
99
100         time(&now);
101         tm = localtime(&now);
102         fprintf (stderr, "%02d.%02d.%02d %02d:%02d:%02d %s[%d]: %s\n",
103                         tm->tm_mday, tm->tm_mon, tm->tm_year,
104                         tm->tm_hour, tm->tm_min, tm->tm_sec,
105                         progname, mypid,
106                         buffer);
107     }
108 }