libbb: make syslog level for bb_error_msg's configurable. use it in crond
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 30 Apr 2014 12:48:28 +0000 (14:48 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 30 Apr 2014 12:48:28 +0000 (14:48 +0200)
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>
include/libbb.h
libbb/verror_msg.c
miscutils/crond.c

index 1cbe2c8b4388cc1769e070d1f99f9f2831d32f4e..29cf6bc6d8e290a5ac63ddf1eaa79e82985a278b 100644 (file)
@@ -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;
index ee95be3e3aa574db7d72af2838b92c3c0d6ba971..87efb56b3025e232406c44a49a8572b27d228223 100644 (file)
@@ -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);
index 995ed9e0ad42c26fa58303769a740c06a734898d..8441b6cc528ad37b7f29d2e65b21059a62db6ec9 100644 (file)
@@ -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)