diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-10-16 02:01:36 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-10-16 02:01:36 +0200 |
commit | 39f9caf261f99a4c944c59ad2be0473051fd43ec (patch) | |
tree | aac392aac39a420215d7c0d30c9f43d0fd2d46d4 | |
parent | b314737e9a0f0df710ba5e8691882cd7d42faaf5 (diff) |
add support for logging messages via syslog (or optionally stdout)
-rw-r--r-- | main.c | 42 | ||||
-rw-r--r-- | netifd.h | 2 |
2 files changed, 41 insertions, 3 deletions
@@ -4,6 +4,8 @@ #include <getopt.h> #include <unistd.h> #include <signal.h> +#include <stdarg.h> +#include <syslog.h> #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>: Path to netifd addons (default: %s)\n" " -h <path>: Path to the hotplug script\n" " -r <path>: 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; } @@ -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); |