summaryrefslogtreecommitdiff
path: root/main/logger.c
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2011-08-12 16:22:45 +0000
committerKinsey Moore <kmoore@digium.com>2011-08-12 16:22:45 +0000
commitbaa2d1d8917b6836a2264aff674ce914ef7e6b2c (patch)
tree780aa47c0d5abc7e05419616142003f01eb40e04 /main/logger.c
parent1a8069abe2fc18e20e1cf2626f4bfc9e2e6d56dc (diff)
Merged revisions 331654 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r331654 | kmoore | 2011-08-12 11:21:37 -0500 (Fri, 12 Aug 2011) | 19 lines Merged revisions 331649 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r331649 | kmoore | 2011-08-12 11:20:25 -0500 (Fri, 12 Aug 2011) | 12 lines Logger does not warn of failure to open logging channels Currently, logger only prints an error message to stderr when it fails to open a logger channel where many users will not see it because the logger lock is held. The alternative provided by this patch is to log the error to all attached consoles in the hopes that it will be easier to see. Additionally, this patch prevents the failed logger channel from being added to the list where it would silently fail on each call to the Asterisk logger. (closes issue ASTERISK-16231) Review: https://reviewboard.asterisk.org/r/1338 ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@331657 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/logger.c')
-rw-r--r--main/logger.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/main/logger.c b/main/logger.c
index 17f342825..209f374e6 100644
--- a/main/logger.c
+++ b/main/logger.c
@@ -274,9 +274,16 @@ static struct logchannel *make_logchannel(const char *channel, const char *compo
channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel);
}
if (!(chan->fileptr = fopen(chan->filename, "a"))) {
- /* Can't log here, since we're called with a lock */
- fprintf(stderr, "Logger Warning: Unable to open log file '%s': %s\n", chan->filename, strerror(errno));
- }
+ /* Can't do real logging here since we're called with a lock
+ * so log to any attached consoles */
+ ast_console_puts_mutable("ERROR: Unable to open log file '", __LOG_ERROR);
+ ast_console_puts_mutable(chan->filename, __LOG_ERROR);
+ ast_console_puts_mutable("': ", __LOG_ERROR);
+ ast_console_puts_mutable(strerror(errno), __LOG_ERROR);
+ ast_console_puts_mutable("'\n", __LOG_ERROR);
+ ast_free(chan);
+ return NULL;
+ }
chan->type = LOGTYPE_FILE;
}
chan->logmask = make_components(chan->components, lineno);
@@ -384,6 +391,11 @@ static void init_logger_chain(int locked, const char *altconf)
var = ast_variable_browse(cfg, "logfiles");
for (; var; var = var->next) {
if (!(chan = make_logchannel(var->name, var->value, var->lineno))) {
+ /* Print error message directly to the consoles since the lock is held
+ * and we don't want to unlock with the list partially built */
+ ast_console_puts_mutable("ERROR: Unable to create log channel '", __LOG_ERROR);
+ ast_console_puts_mutable(var->name, __LOG_ERROR);
+ ast_console_puts_mutable("'\n", __LOG_ERROR);
continue;
}
AST_RWLIST_INSERT_HEAD(&logchannels, chan, list);