]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
core/logging: Fix logging to more than one syslog channel 93/1293/1
authorElazar Broad <elazar@thebroadfamily.com>
Mon, 21 Sep 2015 13:16:46 +0000 (09:16 -0400)
committerMatt Jordan <mjordan@digium.com>
Tue, 22 Sep 2015 12:40:51 +0000 (07:40 -0500)
Currently, Asterisk will log to the last configured syslog
channel in logger.conf. This is due to the fact that the
final call to openlog() supersedes all of the previous calls.
This commit removes the call to openlog() and passes the
facility to ast_log_vsyslog(), along with utilizing the
LOG_MAKEPRI macro to ensure that the message is routed to
the correct facility and with the correct priority.

ASTERISK-25407 #close
Reported by: Elazar Broad
Tested by: Elazar Broad

Change-Id: Ie2a2416bc00cce1b04e99ef40917c2011953ddd2

main/logger.c

index 9f551af38b9d4e994a6570ba0d80784147f486e4..795c85d97b7047afcea2092b2235583fe8a45872 100644 (file)
@@ -316,7 +316,6 @@ static struct logchannel *make_logchannel(const char *channel, const char *compo
 
                chan->type = LOGTYPE_SYSLOG;
                ast_copy_string(chan->filename, channel, sizeof(chan->filename));
-               openlog("asterisk", LOG_PID, chan->facility);
        } else {
                const char *log_dir_prefix = "";
                const char *log_dir_separator = "";
@@ -1019,7 +1018,7 @@ static struct sigaction handle_SIGXFSZ = {
        .sa_flags = SA_RESTART,
 };
 
-static void ast_log_vsyslog(struct logmsg *msg)
+static void ast_log_vsyslog(struct logmsg *msg, int facility)
 {
        char buf[BUFSIZ];
        int syslog_level = ast_syslog_priority_from_loglevel(msg->level);
@@ -1037,6 +1036,8 @@ static void ast_log_vsyslog(struct logmsg *msg)
                return;
        }
 
+       syslog_level = LOG_MAKEPRI(facility, syslog_level);
+
        snprintf(buf, sizeof(buf), "%s[%d]%s: %s:%d in %s: %s",
                 levels[msg->level], msg->lwp, call_identifier_str, msg->file, msg->line, msg->function, msg->message);
 
@@ -1122,7 +1123,7 @@ static void logger_print_normal(struct logmsg *logmsg)
 
                        /* Check syslog channels */
                        if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << logmsg->level))) {
-                               ast_log_vsyslog(logmsg);
+                               ast_log_vsyslog(logmsg, chan->facility);
                        /* Console channels */
                        } else if (chan->type == LOGTYPE_CONSOLE && (chan->logmask & (1 << logmsg->level))) {
                                char linestr[128];