diff --git a/include/libbb.h b/include/libbb.h index 1cbe2c8b4..29cf6bc6d 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1074,6 +1074,7 @@ enum { LOGMODE_BOTH = LOGMODE_SYSLOG + LOGMODE_STDIO, }; extern const char *msg_eol; +extern smallint syslog_level; extern smallint logmode; extern int die_sleep; extern uint8_t xfunc_error_retval; diff --git a/libbb/verror_msg.c b/libbb/verror_msg.c index ee95be3e3..87efb56b3 100644 --- a/libbb/verror_msg.c +++ b/libbb/verror_msg.c @@ -11,6 +11,7 @@ # include #endif +smallint syslog_level = LOG_ERR; smallint logmode = LOGMODE_STDIO; const char *msg_eol = "\n"; @@ -70,7 +71,7 @@ void FAST_FUNC bb_verror_msg(const char *s, va_list p, const char* strerr) } #if ENABLE_FEATURE_SYSLOG if (logmode & LOGMODE_SYSLOG) { - syslog(LOG_ERR, "%s", msg + applet_len); + syslog(syslog_level, "%s", msg + applet_len); } #endif free(msg); diff --git a/miscutils/crond.c b/miscutils/crond.c index 995ed9e0a..8441b6cc5 100644 --- a/miscutils/crond.c +++ b/miscutils/crond.c @@ -163,28 +163,21 @@ static void crondlog(const char *ctl, ...) __attribute__ ((format (printf, 1, 2) static void crondlog(const char *ctl, ...) { va_list va; - int level = (ctl[0] & 0x1f); + unsigned level = (ctl[0] & 0x1f); va_start(va, ctl); - if (level >= (int)G.log_level) { - /* Debug mode: all to (non-redirected) stderr, */ - /* Syslog mode: all to syslog (logmode = LOGMODE_SYSLOG), */ - if (!DebugOpt && G.log_filename) { - /* Otherwise (log to file): we reopen log file at every write: */ + if (level >= G.log_level) { + if (G.log_filename) { + /* If log to file, reopen log file at every write: */ int logfd = open_or_warn(G.log_filename, O_WRONLY | O_CREAT | O_APPEND); if (logfd >= 0) xmove_fd(logfd, STDERR_FILENO); } /* When we log to syslog, level > 8 is logged at LOG_ERR - * syslog level, level <= 8 is logged at LOG_INFO. */ - if (level > 8) { - bb_verror_msg(ctl + 1, va, /* strerr: */ NULL); - } else { - char *msg = NULL; - vasprintf(&msg, ctl + 1, va); - bb_info_msg("%s: %s", applet_name, msg); - free(msg); - } + * syslog level, level <= 8 is logged at LOG_INFO. + */ + syslog_level = (level > 8) ? LOG_ERR : LOG_INFO; + bb_verror_msg(ctl + 1, va, /* strerr: */ NULL); } va_end(va); if (ctl[0] & 0x80)