diff options
| author | Quentin Young <qlyoung@users.noreply.github.com> | 2018-10-03 20:31:50 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-10-03 20:31:50 -0400 | 
| commit | 53aa82daaf32a6fa54f1e3d2d9f2b4ce3247ba0e (patch) | |
| tree | fa8a4f19d5a128adb396036ffeb85a97838c3dbc | |
| parent | 9b00962886a6958c2c2c65370c3a56f862fb0e9c (diff) | |
| parent | 65bf704b397b4d2a30c8bc3c5ea3c74fccbadc85 (diff) | |
Merge pull request #3123 from opensourcerouting/6.0-error-code-switch
[6.0] lib: add "log error-code" switch
| -rw-r--r-- | lib/command.c | 17 | ||||
| -rw-r--r-- | lib/log.c | 17 | ||||
| -rw-r--r-- | lib/log.h | 4 | ||||
| -rw-r--r-- | lib/log_int.h | 1 | 
4 files changed, 38 insertions, 1 deletions
diff --git a/lib/command.c b/lib/command.c index 1df6442107..850980bd4e 100644 --- a/lib/command.c +++ b/lib/command.c @@ -570,6 +570,9 @@ static int config_write_host(struct vty *vty)  		if (zlog_default->record_priority == 1)  			vty_out(vty, "log record-priority\n"); +		if (zlog_default->error_code) +			vty_out(vty, "log error-code\n"); +  		if (zlog_default->timestamp_precision > 0)  			vty_out(vty, "log timestamp precision %d\n",  				zlog_default->timestamp_precision); @@ -2334,6 +2337,8 @@ DEFUN (show_logging,  	vty_out(vty, "Protocol name: %s\n", zl->protoname);  	vty_out(vty, "Record priority: %s\n",  		(zl->record_priority ? "enabled" : "disabled")); +	vty_out(vty, "Error code: %s\n", +		(zl->error_code ? "enabled" : "disabled"));  	vty_out(vty, "Timestamp precision: %d\n", zl->timestamp_precision);  	return CMD_SUCCESS; @@ -2612,6 +2617,17 @@ DEFUN (no_config_log_record_priority,  	return CMD_SUCCESS;  } +DEFUN (config_log_error_code, +       config_log_error_code_cmd, +       "[no] log error-code", +       NO_STR +       "Logging control\n" +       "Log the error code number where available\n") +{ +	zlog_default->error_code = !!strcmp(argv[0]->text, "no"); +	return CMD_SUCCESS; +} +  DEFUN (config_log_timestamp_precision,         config_log_timestamp_precision_cmd,         "log timestamp precision (0-6)", @@ -2883,6 +2899,7 @@ void cmd_init(int terminal)  		install_element(CONFIG_NODE, &config_log_record_priority_cmd);  		install_element(CONFIG_NODE,  				&no_config_log_record_priority_cmd); +		install_element(CONFIG_NODE, &config_log_error_code_cmd);  		install_element(CONFIG_NODE,  				&config_log_timestamp_precision_cmd);  		install_element(CONFIG_NODE, @@ -684,6 +684,23 @@ ZLOG_FUNC(zlog_debug, LOG_DEBUG)  #undef ZLOG_FUNC +void zlog_err_id(uint32_t id, const char *format, ...) +{ +	va_list args; +	va_start(args, format); +	if (zlog_default && zlog_default->error_code) { +		char newfmt[strlen(format) + 32]; + +		snprintf(newfmt, sizeof(newfmt), "[EC %"PRIu32"] %s", id, +			 format); +		vzlog(LOG_ERR, newfmt, args); +	} else { +		vzlog(LOG_ERR, format, args); +	} +	va_end(args); +} + +  void zlog_thread_info(int log_level)  {  	struct thread *tc; @@ -79,6 +79,8 @@ extern void closezlog(void);  #endif /* __GNUC__ */  /* Handy zlog functions. */ +extern void zlog_err_id(uint32_t id, const char *format, ...) +	PRINTF_ATTRIBUTE(2, 3);  extern void zlog_err(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);  extern void zlog_warn(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);  extern void zlog_info(const char *format, ...) PRINTF_ATTRIBUTE(1, 2); @@ -87,7 +89,7 @@ extern void zlog_debug(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);  /* For logs which have error codes associated with them */  #define flog_err(ferr_id, format, ...)                                        \ -	zlog_err("[EC %"PRIu32"] " format, ferr_id, ##__VA_ARGS__) +	zlog_err_id(ferr_id, format, ##__VA_ARGS__)  #define flog_err_sys(ferr_id, format, ...)                                     \  	flog_err(ferr_id, format, ##__VA_ARGS__) diff --git a/lib/log_int.h b/lib/log_int.h index a7f8be9ae7..e17d0e80d2 100644 --- a/lib/log_int.h +++ b/lib/log_int.h @@ -36,6 +36,7 @@ struct zlog {  	int facility;	/* as per syslog facility */  	int record_priority; /* should messages logged through stdio include the  				priority of the message? */ +	int error_code;  	int syslog_options;  /* 2nd arg to openlog */  	int timestamp_precision; /* # of digits of subsecond precision */  };  | 
