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
pull/23/head
Mark Murawski 4 years ago committed by George Joseph
parent 8d3d7bdb82
commit b4347c4861

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

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

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

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

Loading…
Cancel
Save