From: Donald Sharp Date: Tue, 19 Jun 2018 13:02:21 +0000 (-0400) Subject: lib: Add --log-level to daemons X-Git-Tag: frr-6.1-dev~262^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e9b4e74a7868cd4f8eff60209c1039cacb3421b4;p=mirror%2Ffrr.git lib: Add --log-level to daemons Add the ability to specify the designated log level at startup. --log-level Signed-off-by: Donald Sharp --- diff --git a/lib/command.c b/lib/command.c index 32b052c36c..4ab47e5fc2 100644 --- a/lib/command.c +++ b/lib/command.c @@ -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); diff --git a/lib/command.h b/lib/command.h index 9ccd13c73b..395c971c55 100644 --- a/lib/command.h +++ b/lib/command.h @@ -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 */ diff --git a/lib/libfrr.c b/lib/libfrr.c index ddc952b2cb..505bea9b18 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -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:\n", + " --log Set Logging to stdout, syslog, or file:\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)) { diff --git a/lib/libfrr.h b/lib/libfrr.h index ecef8c616e..d255279906 100644 --- a/lib/libfrr.h +++ b/lib/libfrr.h @@ -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);