From 39f9caf261f99a4c944c59ad2be0473051fd43ec Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 16 Oct 2011 02:01:36 +0200 Subject: [PATCH] add support for logging messages via syslog (or optionally stdout) --- main.c | 42 +++++++++++++++++++++++++++++++++++++++--- netifd.h | 2 ++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index b07784e..c918203 100644 --- a/main.c +++ b/main.c @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include "netifd.h" #include "ubus.h" @@ -19,6 +21,13 @@ static char **global_argv; static struct list_head process_list = LIST_HEAD_INIT(process_list); static struct list_head fds = LIST_HEAD_INIT(fds); +#ifdef DUMMY_MODE +#define use_syslog false +#else +static bool use_syslog = true; +#endif + + static void netifd_delete_process(struct netifd_process *proc) { @@ -28,6 +37,19 @@ netifd_delete_process(struct netifd_process *proc) netifd_fd_delete(&proc->log_fd); } +void +netifd_log_message(int priority, const char *format, ...) +{ + va_list vl; + + va_start(vl, format); + if (use_syslog) + vsyslog(priority, format, vl); + else + vfprintf(stderr, format, vl); + va_end(vl); +} + static void netifd_process_log_cb(struct uloop_fd *fd, unsigned int events) { @@ -64,7 +86,8 @@ retry: *cur = 0; if (!proc->log_overflow) - fprintf(stderr, "%s (%d): %s\n", log_prefix, proc->uloop.pid, buf); + netifd_log_message(LOG_NOTICE, "%s (%d): %s\n", + log_prefix, proc->uloop.pid, buf); else proc->log_overflow = false; @@ -79,7 +102,8 @@ retry: if (len == LOG_BUF_SIZE) { if (!proc->log_overflow) { proc->log_buf[LOG_BUF_SIZE] = 0; - fprintf(stderr, "%s (%d): %s [...]\n", log_prefix, proc->uloop.pid, proc->log_buf); + netifd_log_message(LOG_NOTICE, "%s (%d): %s [...]\n", + log_prefix, proc->uloop.pid, proc->log_buf); proc->log_overflow = true; } len = 0; @@ -221,6 +245,7 @@ static int usage(const char *progname) " -p : Path to netifd addons (default: %s)\n" " -h : Path to the hotplug script\n" " -r : Path to resolv.conf\n" + " -S: Use stderr instead of syslog for log messages\n" " (default: "DEFAULT_HOTPLUG_PATH")\n" "\n", progname, main_path); @@ -266,7 +291,7 @@ int main(int argc, char **argv) global_argv = argv; - while ((ch = getopt(argc, argv, "d:s:p:h:r:")) != -1) { + while ((ch = getopt(argc, argv, "d:s:p:h:r:S")) != -1) { switch(ch) { case 'd': debug_mask = strtoul(optarg, NULL, 0); @@ -283,11 +308,19 @@ int main(int argc, char **argv) case 'r': resolv_conf = optarg; break; +#ifndef DUMMY_MODE + case 'S': + use_syslog = false; + break; +#endif default: return usage(argv[0]); } } + if (use_syslog) + openlog("netifd", 0, LOG_DAEMON); + netifd_setup_signals(); if (netifd_ubus_init(socket) < 0) { fprintf(stderr, "Failed to connect to ubus\n"); @@ -306,5 +339,8 @@ int main(int argc, char **argv) netifd_ubus_done(); + if (use_syslog) + closelog(); + return 0; } diff --git a/netifd.h b/netifd.h index 316c746..8330aff 100644 --- a/netifd.h +++ b/netifd.h @@ -70,6 +70,8 @@ struct netifd_process { bool log_overflow; }; +void netifd_log_message(int priority, const char *format, ...); + int netifd_start_process(const char **argv, char **env, struct netifd_process *proc); void netifd_kill_process(struct netifd_process *proc); -- 2.11.0