From ab81c355fa292b7d71253a4b8d3a3daf31a78ed1 Mon Sep 17 00:00:00 2001 From: Arturo Borrero Gonzalez Date: Fri, 28 Oct 2016 08:57:08 +0200 Subject: log: print messages to stdout/sderr if running in console mode If conntrackd is running in console mode (i.e. in foreground) then we can print the log messages to stdout/stderr. This eases the workflow for admins, since we condensate more info into the same terminal output. Example: % sudo conntrackd -C /etc/conntrackd.conf WARNING: XXXX is an invalid interface [Thu Oct 27 13:57:09 2016] (pid=7581) [notice] disabling internal cache [Thu Oct 27 13:57:09 2016] (pid=7581) [notice] disabling external cache [Thu Oct 27 13:57:09 2016] (pid=7581) [ERROR] can't open channel socket: No such device [Thu Oct 27 13:57:09 2016] (pid=7581) [ERROR] initialization failed ERROR: conntrackd cannot start, please check the logfile for more info Signed-off-by: Arturo Borrero Gonzalez Signed-off-by: Pablo Neira Ayuso --- src/log.c | 67 +++++++++++++++++++++++++++++++++++++++++++------------------- src/main.c | 1 + 2 files changed, 48 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/log.c b/src/log.c index d4de111..0796ba9 100644 --- a/src/log.c +++ b/src/log.c @@ -60,41 +60,68 @@ int init_log(void) return 0; } -void dlog(int priority, const char *format, ...) - { - FILE *fd = STATE(log); +static void logline_put(FILE *fd, int priority, const char *format, + va_list *args) +{ time_t t; char *buf; const char *prio; + + t = time(NULL); + buf = ctime(&t); + buf[strlen(buf)-1]='\0'; + + switch (priority) { + case LOG_INFO: + prio = "info"; + break; + case LOG_NOTICE: + prio = "notice"; + break; + case LOG_WARNING: + prio = "warning"; + break; + case LOG_ERR: + prio = "ERROR"; + break; + default: + prio = "?"; + break; + } + + fprintf(fd, "[%s] (pid=%d) [%s] ", buf, getpid(), prio); + vfprintf(fd, format, *args); + fprintf(fd, "\n"); + fflush(fd); +} + +void dlog(int priority, const char *format, ...) +{ + FILE *fd = STATE(log); + FILE *console_out; va_list args; - - if (fd) { - t = time(NULL); - buf = ctime(&t); - buf[strlen(buf)-1]='\0'; + + if (CONFIG(running_mode) != DAEMON) { switch (priority) { case LOG_INFO: - prio = "info"; - break; case LOG_NOTICE: - prio = "notice"; + console_out = stdout; break; case LOG_WARNING: - prio = "warning"; - break; case LOG_ERR: - prio = "ERROR"; - break; default: - prio = "?"; + console_out = stderr; break; } va_start(args, format); - fprintf(fd, "[%s] (pid=%d) [%s] ", buf, getpid(), prio); - vfprintf(fd, format, args); + logline_put(console_out, priority, format, &args); + va_end(args); + } + + if (fd) { + va_start(args, format); + logline_put(fd, priority, format, &args); va_end(args); - fprintf(fd, "\n"); - fflush(fd); } if (CONFIG(syslog_facility) != -1) { diff --git a/src/main.c b/src/main.c index 2be9b2f..0319b5c 100644 --- a/src/main.c +++ b/src/main.c @@ -150,6 +150,7 @@ int main(int argc, char *argv[]) switch(argv[i][1]) { case 'd': set_operation_mode(&type, DAEMON, argv); + CONFIG(running_mode) = DAEMON; break; case 'c': set_operation_mode(&type, REQUEST, argv); -- cgit v1.2.3