X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=log.c;h=300f4b8e066cd1269f89466509d171116c0f5841;hb=3cda9c7bba49d5f9b8321bb66b14db9b9bc2f528;hp=3bc8017179410067374fcefd6c02c6e7d6984330;hpb=f830858154d6bf294a06cb79fb219b6404cb4295;p=onak.git diff --git a/log.c b/log.c index 3bc8017..300f4b8 100644 --- a/log.c +++ b/log.c @@ -4,6 +4,8 @@ * Jonathan McDowell * * Copyright 2003 Project Purple + * + * $Id: log.c,v 1.5 2004/03/23 12:33:47 noodles Exp $ */ #include @@ -22,7 +24,7 @@ * logs - if we're asked to log something below this level we won't output * it. */ -static loglevels logthres = LOGTHING_DEBUG; +static loglevels logthres = LOGTHING_NOTICE; /* * logappname - the name of the application using us. @@ -100,6 +102,57 @@ loglevels setlogthreshold(loglevels loglevel) return oldlevel; } +/* + * vflog - write a log entry to an already opened log file. + * @logfile: The FILE * handle of the open log file. + * @format: A format string. + * @ap: The va_list of the parmeters for the format string. + * + * This function outputs a log entry to an opened file. A leading + * time/date stamp and a trailing newline are automatically added. The + * format parameter is of the same nature as that used in vprintf. + */ +static void vflog(FILE *logfile, const char *format, va_list ap) +{ + struct tm *timestamp = NULL; + time_t timer = 0; + + timer = time(NULL); + timestamp = localtime(&timer); + + fprintf(logfile, "[%02d/%02d/%4d %02d:%02d:%02d] %s[%d]: ", + timestamp->tm_mday, + timestamp->tm_mon + 1, + timestamp->tm_year + 1900, + timestamp->tm_hour, + timestamp->tm_min, + timestamp->tm_sec, + (logappname == NULL) ? "" : logappname, + getpid()); + vfprintf(logfile, format, ap); + fprintf(logfile, "\n"); + + return; +} + +/* + * flog - write a log entry to an already opened log file. + * @logfile: The FILE * handle of the open log file. + * @format: A format string. + * + * This function outputs a log entry to an opened file. A leading + * time/date stamp and a trailing newline are automatically added. The + * format parameter is of the same nature as that used in printf. + */ +static void flog(FILE *logfile, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + vflog(logfile, format, ap); + va_end(ap); +} + /* * logthing - output a log entry * @loglevel: The level of the log. @@ -114,37 +167,27 @@ loglevels setlogthreshold(loglevels loglevel) int logthing(loglevels loglevel, const char *format, ...) { FILE *logfile = NULL; - struct tm *timestamp = NULL; - time_t timer = 0; va_list ap; if (loglevel >= logthres) { - timer = time(NULL); - timestamp = localtime(&timer); - if (logfilename != NULL) { logfile = fopen(logfilename, "a"); - flockfile(logfile); + if (logfile != NULL) { + flockfile(logfile); + } else { + logfile = stderr; + flog(logfile, "Couldn't open logfile: %s", + logfilename); + } } else { logfile = stderr; } - fprintf(logfile, "[%02d/%02d/%4d %02d:%02d:%02d] %s[%d]: ", - timestamp->tm_mday, - timestamp->tm_mon + 1, - timestamp->tm_year + 1900, - timestamp->tm_hour, - timestamp->tm_min, - timestamp->tm_sec, - (logappname == NULL) ? "" : logappname, - getpid()); va_start(ap, format); - vfprintf(logfile, format, ap); + vflog(logfile, format, ap); va_end(ap); - fprintf(logfile, "\n"); - - if (logfilename != NULL) { + if (logfile != stderr) { funlockfile(logfile); fclose(logfile); logfile = NULL;