syslogd: add option to suppress logging of messages lower than level N (-n N)
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 30 Sep 2006 19:17:40 +0000 (19:17 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 30 Sep 2006 19:17:40 +0000 (19:17 -0000)
include/usage.h
sysklogd/syslogd.c

index 543befc..1da436a 100644 (file)
@@ -2780,7 +2780,8 @@ USE_FEATURE_START_STOP_DAEMON_FANCY( \
        "\t-m MIN\t\tMinutes between MARK lines (default=20, 0=off)\n" \
        "\t-n\t\tRun as a foreground process\n" \
        "\t-O FILE\t\tUse an alternate log file (default=/var/log/messages)\n" \
-       "\t-S\t\tMake logging output smaller." \
+       "\t-l n\tSets the local log level of messages to n\n" \
+       "\t-S\t\tMake logging output smaller" \
        USE_FEATURE_ROTATE_LOGFILE( \
        "\n\t-s SIZE\t\tMax size (KB) before rotate (default=200KB, 0=off)\n" \
        "\t-b NUM\t\tNumber of rotated logs to keep (default=1, max=99, 0=purge)") \
index 9a5a04a..a257e74 100644 (file)
@@ -42,6 +42,9 @@ static int logFileRotate = 1;
 /* interval between marks in seconds */
 static int MarkInterval = 20 * 60;
 
+/* level of messages to be locally logged */
+static int logLevel = 8;
+
 /* localhost's name */
 static char LocalHostName[64];
 
@@ -413,10 +416,12 @@ retry:
 #endif
        {
                /* now spew out the message to wherever it is supposed to go */
-               if (opts & SYSLOG_OPT_small)
-                       message("%s %s\n", timestamp, msg);
-               else
-                       message("%s %s %s %s\n", timestamp, LocalHostName, res, msg);
+               if (pri == 0 || LOG_PRI(pri) < logLevel) {
+                       if (opts & SYSLOG_OPT_small)
+                               message("%s %s\n", timestamp, msg);
+                       else
+                               message("%s %s %s %s\n", timestamp, LocalHostName, res, msg);
+               }
        }
 }
 
@@ -581,6 +586,13 @@ int syslogd_main(int argc, char **argv)
                case 'O':
                        logFilePath = optarg;
                        break;
+               case 'l':
+                       logLevel = atoi(optarg);
+                       /* Valid levels are between 1 and 8 */
+                       if (logLevel < 1 || logLevel > 8) {
+                               bb_show_usage();
+                       }
+                       break;
 #ifdef CONFIG_FEATURE_ROTATE_LOGFILE
                case 's':
                        logFileSize = atoi(optarg) * 1024;