From d426f058944c469e6f609545f26b78dddb89b469 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 4 Apr 2024 02:02:25 +0200 Subject: [PATCH] log: allow setting loglevel Signed-off-by: David Bauer --- .../node-whisperer/files/node-whisperer.init | 6 +++- .../node-whisperer/files/node-whisperer.uci | 3 +- src/daemon.c | 16 +++++++++ src/log.c | 33 ++++++++++++++----- src/log.h | 11 ++++--- 5 files changed, 54 insertions(+), 15 deletions(-) diff --git a/openwrt/node-whisperer/files/node-whisperer.init b/openwrt/node-whisperer/files/node-whisperer.init index 03a4543..b77c72d 100644 --- a/openwrt/node-whisperer/files/node-whisperer.init +++ b/openwrt/node-whisperer/files/node-whisperer.init @@ -30,7 +30,7 @@ load_config() { ubus -t 10 wait_for node_whisperer config_load node-whisperer - config_foreach uci_nw node-whisperer + config_foreach uci_nw settings } reload_service() { @@ -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..a126ca8 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' +config settings 'settings' option enabled '1' + option log_level '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..507b30e 100644 --- a/src/log.c +++ b/src/log.c @@ -1,26 +1,34 @@ #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; } switch (level) { - case LOG_DEBUG: + case LL_DEBUG: level_str = "DEBUG"; break; - case LOG_INFO: + case LL_INFO: level_str = "INFO"; break; - case LOG_ERROR: + case LL_WARNING: + level_str = "WARNING"; + break; + case LL_ERROR: level_str = "ERROR"; break; + case LL_FATAL: + level_str = "FATAL"; + break; default: level_str = "UNKNOWN"; break; @@ -28,29 +36,38 @@ 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; + openlog("node-whisperer", 0, LOG_USER); +} + void log_error(const char *fmt, ...) { va_list args; va_start(args, fmt); - log_vprintf(LOG_ERROR, fmt, args); + log_vprintf(LL_ERROR, fmt, args); va_end(args); } void log_info(const char *fmt, ...) { va_list args; va_start(args, fmt); - log_vprintf(LOG_INFO, fmt, args); + log_vprintf(LL_INFO, fmt, args); va_end(args); } void log_debug(const char *fmt, ...) { va_list args; va_start(args, fmt); - log_vprintf(LOG_DEBUG, fmt, args); + log_vprintf(LL_DEBUG, fmt, args); va_end(args); } diff --git a/src/log.h b/src/log.h index ed94755..190596d 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, + LL_ERROR = 2, + LL_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, ...);