summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2014-04-30 14:48:28 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2014-04-30 14:48:28 +0200
commit3dfe0ae5a8c4f3a75f61df157db157ac0e044a51 (patch)
tree1675fbf44c96d1d591969104d4322f2fe058fdd9
parent01a1a967c99d6ea75387c6ca8041e9061ea4a111 (diff)
libbb: make syslog level for bb_error_msg's configurable. use it in crond
function old new delta bb_verror_msg 380 386 +6 syslog_level - 1 +1 crondlog 165 108 -57 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--include/libbb.h1
-rw-r--r--libbb/verror_msg.c3
-rw-r--r--miscutils/crond.c23
3 files changed, 11 insertions, 16 deletions
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 <syslog.h>
#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)