summaryrefslogtreecommitdiffstats
path: root/support/nfs/xlog.c
diff options
context:
space:
mode:
authorneilbrown <neilbrown>2005-03-14 05:49:57 +0000
committerneilbrown <neilbrown>2005-03-14 05:49:57 +0000
commit3a2c185ce46190b9f4712b2432297aa04f4bdd33 (patch)
tree79b74b5c034cabfedf58043a4a658c1e7d2a0022 /support/nfs/xlog.c
parent54669c988cc7609a4aab1021604244424ebb795a (diff)
downloadnfs-utils-3a2c185ce46190b9f4712b2432297aa04f4bdd33.tar.gz
nfs-utils-3a2c185ce46190b9f4712b2432297aa04f4bdd33.tar.xz
nfs-utils-3a2c185ce46190b9f4712b2432297aa04f4bdd33.zip
Sanitise stderr logging.
Diffstat (limited to 'support/nfs/xlog.c')
-rw-r--r--support/nfs/xlog.c89
1 files changed, 45 insertions, 44 deletions
diff --git a/support/nfs/xlog.c b/support/nfs/xlog.c
index b06d12e..e1e4c3f 100644
--- a/support/nfs/xlog.c
+++ b/support/nfs/xlog.c
@@ -29,12 +29,12 @@
#undef VERBOSE_PRINTF
-static int foreground = 1; /* not a daemon initially */
+static int log_stderr = 1;
+static int log_syslog = 1;
static int logging = 0; /* enable/disable DEBUG logs */
static int logmask = 0; /* What will be logged */
static char log_name[256]; /* name of this program */
static int log_pid = -1; /* PID of this program */
-static FILE *log_fp = (FILE *)NULL; /* fp for the log file */
static void xlog_toggle(int sig);
static struct xlog_debugfac debugnames[] = {
@@ -50,11 +50,6 @@ void
xlog_open(char *progname)
{
openlog(progname, LOG_PID, LOG_DAEMON);
- if (foreground) {
- log_fp = stderr;
- if (log_fp != NULL)
- setbuf(log_fp, NULL);
- }
strncpy(log_name, progname, sizeof (log_name) - 1);
log_name [sizeof (log_name) - 1] = '\0';
@@ -65,9 +60,15 @@ xlog_open(char *progname)
}
void
-xlog_background(void)
+xlog_stderr(int on)
+{
+ log_stderr = on;
+}
+
+void
+xlog_syslog(int on)
{
- foreground = 0;
+ log_syslog = on;
}
static void
@@ -126,17 +127,13 @@ xlog_enabled(int fac)
}
-/* Write something to the system logfile. */
+/* Write something to the system logfile and/or stderr */
void
xlog(int kind, const char *fmt, ...)
{
char buff[1024];
va_list args;
- int logged = 1, n;
-#ifdef VERBOSE_PRINTF
- time_t now;
- struct tm *tm;
-#endif
+ int n;
if (!(kind & (L_ALL)) && !(logging && (kind & logmask)))
return;
@@ -148,40 +145,44 @@ xlog(int kind, const char *fmt, ...)
if ((n = strlen(buff)) > 0 && buff[n-1] == '\n')
buff[--n] = '\0';
- switch (kind) {
- case L_FATAL:
- syslog(LOG_ERR, "%s", buff);
- break;
- case L_ERROR:
- syslog(LOG_ERR, "%s", buff);
- break;
- case L_WARNING:
- syslog(LOG_WARNING, "%s", buff);
- break;
- case L_NOTICE:
- syslog(LOG_NOTICE, "%s", buff);
- break;
- default:
- logged = 0;
- break;
+ if (log_syslog) {
+ switch (kind) {
+ case L_FATAL:
+ syslog(LOG_ERR, "%s", buff);
+ break;
+ case L_ERROR:
+ syslog(LOG_ERR, "%s", buff);
+ break;
+ case L_WARNING:
+ syslog(LOG_WARNING, "%s", buff);
+ break;
+ case L_NOTICE:
+ syslog(LOG_NOTICE, "%s", buff);
+ break;
+ default:
+ if (!log_stderr)
+ syslog(LOG_DEBUG, "%s", buff);
+ break;
+ }
}
- if (!logged || foreground) {
- if (!logged && log_fp == NULL) {
- syslog(LOG_DEBUG, "%s", buff);
- } else if (log_fp != NULL) {
+
+ if (log_stderr) {
#ifdef VERBOSE_PRINTF
- time(&now);
- tm = localtime(&now);
- fprintf(log_fp, "%s[%d] %02d/%02d/%02d %02d:%02d %s\n",
- log_name, log_pid,
- tm->tm_mon + 1, tm->tm_mday,
- tm->tm_year, tm->tm_hour, tm->tm_min,
- buff);
+ time_t now;
+ struct tm *tm;
+
+ time(&now);
+ tm = localtime(&now);
+ fprintf(stderr, "%s[%d] %04d-%02d-%02d %02d:%02d:%02d %s\n",
+ log_name, log_pid,
+ tm->tm_year+1900, tm->tm_mon + 1, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec,
+ buff);
#else
- fprintf(log_fp, "%s: %s\n", log_name, buff);
+ fprintf(stderr, "%s: %s\n", log_name, buff);
#endif
- }
}
+
if (kind == L_FATAL)
exit(1);
}