]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: Add --log-level to daemons
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 19 Jun 2018 13:02:21 +0000 (09:02 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 19 Jun 2018 13:02:21 +0000 (09:02 -0400)
Add the ability to specify the designated log level at startup.

--log-level <emergencies|alerts|critical|errors|warnings|notifications|informational|debugging>

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/command.c
lib/command.h
lib/libfrr.c
lib/libfrr.h

index 32b052c36cabea879df82aa993a98c69252017c2..4ab47e5fc25d534dcdb8c2b9d277f4182aac3439 100644 (file)
@@ -2446,21 +2446,31 @@ static int set_log_file(struct vty *vty, const char *fname, int loglevel)
        return CMD_SUCCESS;
 }
 
-void command_setup_early_logging(const char *option)
+void command_setup_early_logging(const char *dest, const char *level)
 {
        char *token;
 
-       if (strcmp(option, "stdout") == 0) {
+       if (level) {
+               int nlevel = level_match(level);
+
+               if (nlevel != ZLOG_DISABLED)
+                       zlog_default->default_lvl = nlevel;
+       }
+
+       if (!dest)
+               return;
+
+       if (strcmp(dest, "stdout") == 0) {
                zlog_set_level(ZLOG_DEST_STDOUT, zlog_default->default_lvl);
                return;
        }
 
-       if (strcmp(option, "syslog") == 0) {
+       if (strcmp(dest, "syslog") == 0) {
                zlog_set_level(ZLOG_DEST_SYSLOG, zlog_default->default_lvl);
                return;
        }
 
-       token = strstr(option, ":");
+       token = strstr(dest, ":");
        token++;
 
        set_log_file(NULL, token, zlog_default->default_lvl);
index 9ccd13c73ba4f4d7fd975909252f931d5c4876a5..395c971c55535e07b0db746af7b87cddc0bd3884 100644 (file)
@@ -479,5 +479,5 @@ extern void
 cmd_variable_handler_register(const struct cmd_variable_handler *cvh);
 extern char *cmd_variable_comp2str(vector comps, unsigned short cols);
 
-extern void command_setup_early_logging(const char *option);
+extern void command_setup_early_logging(const char *dest, const char *level);
 #endif /* _ZEBRA_COMMAND_H */
index ddc952b2cbed6ce2bebf9cc288dc7a18ecb23610..505bea9b18fef91858c2b60de579a0449c4de6f2 100644 (file)
@@ -78,7 +78,8 @@ static void opt_extend(const struct optspec *os)
 
 #define OPTION_VTYSOCK   1000
 #define OPTION_MODULEDIR 1002
-#define OPTION_LOG 1003
+#define OPTION_LOG       1003
+#define OPTION_LOGLEVEL  1004
 
 static const struct option lo_always[] = {
        {"help", no_argument, NULL, 'h'},
@@ -88,6 +89,7 @@ static const struct option lo_always[] = {
        {"vty_socket", required_argument, NULL, OPTION_VTYSOCK},
        {"moduledir", required_argument, NULL, OPTION_MODULEDIR},
        {"log", required_argument, NULL, OPTION_LOG},
+       {"log-level", required_argument, NULL, OPTION_LOGLEVEL},
        {NULL}};
 static const struct optspec os_always = {
        "hvdM:",
@@ -97,7 +99,8 @@ static const struct optspec os_always = {
        "  -M, --module       Load specified module\n"
        "      --vty_socket   Override vty socket path\n"
        "      --moduledir    Override modules directory\n"
-       "      --log          Set Logging to stdout, syslog, or file:<name>\n",
+       "      --log          Set Logging to stdout, syslog, or file:<name>\n"
+       "      --log-level    Set Logging Level to use, debug, info, warn, etc\n",
        lo_always};
 
 
@@ -450,6 +453,9 @@ static int frr_opt(int opt)
        case OPTION_LOG:
                di->early_logging = optarg;
                break;
+       case OPTION_LOGLEVEL:
+               di->early_loglevel = optarg;
+               break;
        default:
                return 1;
        }
@@ -550,8 +556,7 @@ struct thread_master *frr_init(void)
        openzlog(di->progname, di->logname, di->instance,
                 LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON);
 
-       if (di->early_logging)
-               command_setup_early_logging(di->early_logging);
+       command_setup_early_logging(di->early_logging, di->early_loglevel);
 
        if (!frr_zclient_addr(&zclient_addr, &zclient_addr_len,
                              frr_zclientpath)) {
index ecef8c616eb9d0777726cb357b0b799bc3e9ed09..d2552799069ce9233d048c7f2a46f8383e9d3f64 100644 (file)
@@ -59,6 +59,7 @@ struct frr_daemon_info {
        const char *module_path;
        const char *pathspace;
        const char *early_logging;
+       const char *early_loglevel;
 
        const char *proghelp;
        void (*printhelp)(FILE *target);