From a0009c807eb6ad01ea0827b2b14ea3bd433ddc69 Mon Sep 17 00:00:00 2001 From: Mark Murawski <markm@intellasoft.net> Date: Fri, 19 Mar 2021 10:11:26 -0400 Subject: [PATCH] logger: Console sessions will now respect logger.conf dateformat= option The 'core' console (ie: asterisk -c) does read logger.conf and does use the dateformat= option. Whereas 'remote' consoles (ie: asterisk -r -T) does not read logger.conf and uses a hard coded dateformat option for printing received verbose messages: main/logger.c: static char dateformat[256] = "%b %e %T" This change will load logger.conf for each remote console session and use the dateformat= option to set the per-line timestamp for verbose messages Change-Id: I3ea10990dbd920e9f7ce8ff771bc65aa7f4ea8c1 ASTERISK-25358: #close Reported-by: Igor Liferenko --- doc/CHANGES-staging/logger_dateformat.txt | 47 +++++++++++++++++++++++ include/asterisk/logger.h | 5 +++ main/asterisk.c | 2 + main/logger.c | 17 ++++++++ 4 files changed, 71 insertions(+) create mode 100644 doc/CHANGES-staging/logger_dateformat.txt diff --git a/doc/CHANGES-staging/logger_dateformat.txt b/doc/CHANGES-staging/logger_dateformat.txt new file mode 100644 index 0000000000..efeb11803d --- /dev/null +++ b/doc/CHANGES-staging/logger_dateformat.txt @@ -0,0 +1,47 @@ +Subject: logger + +The dateformat option in logger.conf will now control the remote +console (asterisk -r -T) timestamp format. Previously, dateformat only +controlled the formatting of the timestamp going to log files and the +main console (asterisk -c) but only for non-verbose messages. + +Internally, Asterisk does not send the logging timestamp with verbose +messages to console clients. It's up to the Asterisk remote consoles +to format verbose messages. Asterisk remote consoles previously did +not load dateformat from logger.conf. + +Previously there was a non-configurable and hard-coded "%b %e %T" +dateformat that would be used no matter what on all verbose console +messages printed on remote consoles. + +Example: +logger.conf + dateformat=%F %T.%3q + +# asterisk -rvvv -T +[2021-03-19 09:54:19.760-0400] Loading res_stasis_answer.so. +[Mar 19 09:55:43] -- Goto (dialExten,s,1) + +Given the following example configuration in logger.conf, Asterisk log +files and the console, will log verbose messages using the given +timestamp. Now ensuring that all remote console messages are logged +with the same dateformat as other log streams. + +--- +[general] +dateformat=%F %T.%3q + +[logfiles] +console => notice,warning,error,verbose +full => notice,warning,error,debug,verbose +--- + +Now we have a globally-defined dateformat that will be used +consistently across the Asterisk main console, remote consoles, and +log files. + +Now we have consistent logging: + +# asterisk -rvvv -T +[2021-03-19 09:54:19.760-0400] Loading res_stasis_answer.so. +[2021-03-19 09:55:43.920-0400] -- Goto (dialExten,s,1) diff --git a/include/asterisk/logger.h b/include/asterisk/logger.h index 6ab55f76da..d823ed4e44 100644 --- a/include/asterisk/logger.h +++ b/include/asterisk/logger.h @@ -621,6 +621,11 @@ an entry/exit message. To do so, you can use the ast_trace macros... */ unsigned int ast_trace_get_by_module(const char *module); +/*! + * \brief load logger.conf configuration for console socket connections + */ +void ast_init_logger_for_socket_console(void); + #define TRACE_ATLEAST(level) \ (option_trace >= (level) \ || (ast_opt_trace_module \ diff --git a/main/asterisk.c b/main/asterisk.c index b42e5963aa..f53c7810e9 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -3254,6 +3254,8 @@ static void ast_remotecontrol(char *data) } ast_verbose("Connected to Asterisk %s currently running on %s (pid = %d)\n", version, hostname, pid); + ast_init_logger_for_socket_console(); + remotehostname = hostname; if (el_hist == NULL || el == NULL) ast_el_initialize(); diff --git a/main/logger.c b/main/logger.c index 5562bf37eb..457a6fb53d 100644 --- a/main/logger.c +++ b/main/logger.c @@ -679,6 +679,23 @@ static struct logchannel *make_logchannel(const char *channel, const char *compo return chan; } +void ast_init_logger_for_socket_console(void) +{ + struct ast_config *cfg; + const char *s; + struct ast_flags config_flags = { 0 }; + + if (!(cfg = ast_config_load2("logger.conf", "logger", config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) { + return; + } + + if ((s = ast_variable_retrieve(cfg, "general", "dateformat"))) { + ast_copy_string(dateformat, s, sizeof(dateformat)); + } + + ast_config_destroy(cfg); +} + /*! * \brief Read config, setup channels. * \param altconf Alternate configuration file to read. -- GitLab