* Add some logging and forking tweaks to work better with systemd.

This commit is contained in:
Justin Maggard
2012-10-04 21:04:36 +00:00
parent de15926f76
commit 2e120e83a0
5 changed files with 43 additions and 25 deletions

37
log.c
View File

@ -25,6 +25,7 @@
#include <string.h>
#include <time.h>
#include "upnpglobalvars.h"
#include "log.h"
static FILE *log_fp = NULL;
@ -123,11 +124,7 @@ log_init(const char *fname, const char *debug)
void
log_err(int level, enum _log_facility facility, char *fname, int lineno, char *fmt, ...)
{
//char errbuf[1024];
char * errbuf;
va_list ap;
time_t t;
struct tm *tm;
if (level && level>log_level[facility] && level>E_FATAL)
return;
@ -135,29 +132,33 @@ log_err(int level, enum _log_facility facility, char *fname, int lineno, char *f
if (!log_fp)
log_fp = stdout;
// timestamp
if (!GETFLAG(SYSTEMD_MASK))
{
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
fprintf(log_fp, "[%04d/%02d/%02d %02d:%02d:%02d] ",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
}
if (level)
fprintf(log_fp, "%s:%d: %s: ", fname, lineno, level_name[level]);
else
fprintf(log_fp, "%s:%d: ", fname, lineno);
// user log
va_start(ap, fmt);
//vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
if (vasprintf(&errbuf, fmt, ap) == -1)
if (vfprintf(log_fp, fmt, ap) == -1)
{
va_end(ap);
return;
}
va_end(ap);
// timestamp
t = time(NULL);
tm = localtime(&t);
fprintf(log_fp, "[%04d/%02d/%02d %02d:%02d:%02d] ",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
if (level)
fprintf(log_fp, "%s:%d: %s: %s", fname, lineno, level_name[level], errbuf);
else
fprintf(log_fp, "%s:%d: %s", fname, lineno, errbuf);
fflush(log_fp);
free(errbuf);
if (level==E_FATAL)
exit(-1);