104dee94175906eeee89789152b439a7eb9d8786
[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  * Modified by Lon Hohberger, Oct. 2000
6  *
7  * NSM for Linux.
8  */
9
10 /* 
11  *      log.c - logging functions for lockd/statd
12  *      260295   okir   started with simply syslog logging.
13  */
14
15 #include "config.h"
16
17 #include <syslog.h>
18 #include <unistd.h>
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <string.h>
22 #include <stdarg.h>
23 #include <time.h>
24 #include <sys/types.h>
25 #include "log.h"
26 #include "statd.h"
27
28 static pid_t    mypid;
29                                                                 /* Turns on logging to console/stderr. */
30 static int      opt_debug = 0;  /* Will be command-line option, eventually */
31
32 void log_init()
33 {
34         if (!(run_mode & MODE_LOG_STDERR)) 
35                 openlog(name_p, LOG_PID, LOG_DAEMON);
36
37         mypid = getpid();
38
39         log(L_WARNING,"Version %s Starting",version_p);
40 }
41
42 void log_background(void)
43 {
44         /* NOP */
45 }
46
47 void die(char *fmt, ...)
48 {
49         char    buffer[1024];
50         va_list ap;
51
52         va_start(ap, fmt);
53         vsnprintf (buffer, 1024, fmt, ap);
54         va_end(ap);
55         buffer[1023]=0;
56
57         log(L_FATAL, "%s", buffer);
58
59 #ifndef DEBUG
60         exit (2);
61 #else
62         abort();        /* make a core */
63 #endif
64 }
65
66 void log(int level, char *fmt, ...)
67 {
68         char    buffer[1024];
69         va_list ap;
70
71         va_start(ap, fmt);
72         vsnprintf (buffer, 1024, fmt, ap);
73         va_end(ap);
74         buffer[1023]=0;
75
76         if ((!(run_mode & MODE_LOG_STDERR)) && (level < L_DEBUG)) {
77                 syslog(level, "%s", buffer);
78         } else if (run_mode & MODE_LOG_STDERR) {
79                 /* Log everything, including dprintf() stuff to stderr */
80                 time_t          now;
81                 struct tm *     tm;
82
83                 time(&now);
84                 tm = localtime(&now);
85                 fprintf (stderr, "%02d/%02d/%04d %02d:%02d:%02d %s[%d]: %s\n",
86                         tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900,
87                         tm->tm_hour, tm->tm_min, tm->tm_sec,
88                         name_p, mypid,
89                         buffer);
90         }
91 }