diff --git a/openwrt/node-whisperer/files/node-whisperer.init b/openwrt/node-whisperer/files/node-whisperer.init index 03a4543..7e5042e 100644 --- a/openwrt/node-whisperer/files/node-whisperer.init +++ b/openwrt/node-whisperer/files/node-whisperer.init @@ -50,10 +50,14 @@ start_service() { ENABLED="$(uci -q get node-whisperer.settings.enabled)" ENABLED="${ENABLED:-1}" + LOG_LEVEL="$(uci -q get node-whisperer.settings.log_level)" + LOG_LEVEL="${LOG_LEVEL:-3}" [ "$ENABLED" -gt 0 ] || return procd_open_instance procd_set_param command "$PROG" + procd_append_param command -l "$LOG_LEVEL" + procd_append_param command -s procd_close_instance } diff --git a/openwrt/node-whisperer/files/node-whisperer.uci b/openwrt/node-whisperer/files/node-whisperer.uci index 967115e..a9b84e9 100644 --- a/openwrt/node-whisperer/files/node-whisperer.uci +++ b/openwrt/node-whisperer/files/node-whisperer.uci @@ -1,6 +1,7 @@ config node-whisperer 'core' option enabled '1' + option loglevel '3' list information 'node_id' list information 'hostname' list information 'uptime' diff --git a/src/daemon.c b/src/daemon.c index d5e8502..8e0aacc 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -160,6 +160,22 @@ static int start_daemon() { } int main(int argc, char *argv[]) { + int opt; + + while ((opt = getopt(argc, argv, "l:s")) != -1) { + switch (opt) { + case 'l': + log_set_level(atoi(optarg)); + break; + case 's': + log_use_syslog(1); + break; + default: + fprintf(stderr, "Usage: %s [-l loglevel] [-s]\n", argv[0]); + exit(EXIT_FAILURE); + } + } + start_daemon(); return 0; } diff --git a/src/log.c b/src/log.c index 90832cd..307a048 100644 --- a/src/log.c +++ b/src/log.c @@ -1,13 +1,15 @@ #include #include +#include #include "log.h" -static enum log_level log_level = LOG_INFO; +static enum log_level log_level = LL_INFO; +static int use_syslog = 0; static void log_vprintf(enum log_level level, const char *fmt, va_list args) { const char *level_str; - if (level < log_level) { + if (level > log_level) { return; } @@ -28,12 +30,20 @@ static void log_vprintf(enum log_level level, const char *fmt, va_list args) { fprintf(stderr, "[%s] ", level_str); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); + + if (use_syslog) { + vsyslog(LOG_INFO, fmt, args); + } } void log_set_level(enum log_level level) { log_level = level; } +void log_use_syslog(int use) { + use_syslog = use; +} + void log_error(const char *fmt, ...) { va_list args; va_start(args, fmt); diff --git a/src/log.h b/src/log.h index ed94755..22d5158 100644 --- a/src/log.h +++ b/src/log.h @@ -1,14 +1,15 @@ #pragma once enum log_level { - LOG_DEBUG, - LOG_INFO, - LOG_WARNING, - LOG_ERROR, - LOG_FATAL + LL_DEBUG = 5, + LL_INFO = 4, + LL_WARNING = 3, + LOG_ERROR = 2, + LOG_FATAL = 1, }; void log_set_level(enum log_level level); +void log_use_syslog(int use); void log_error(const char *fmt, ...); void log_info(const char *fmt, ...);