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
This commit is contained in:
Mark Murawski 2021-03-19 10:11:26 -04:00 committed by George Joseph
parent 9e19d98f45
commit 98d149b4ce
4 changed files with 71 additions and 0 deletions

View File

@ -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)

View File

@ -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 \

View File

@ -3251,6 +3251,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();

View File

@ -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.