Christian Becker created LOG4NET-458:
----------------------------------------
Summary: LocalSyslogAppender does not support multiple identities
Key: LOG4NET-458
URL: https://issues.apache.org/jira/browse/LOG4NET-458
Project: Log4net
Issue Type: Bug
Components: Appenders
Affects Versions: 1.2.13
Reporter: Christian Becker
With multiple LocalSyslogAppender where each one has a different identity,
everything just gets logged with the identity of the last Appender.
In the example below, every log message has the identity of task_info_syslog,
even the appender used is rts_syslog.
I checked the code and this is a bug in LocalSyslogAppender.Append().
The syslogtag is not part of the syslog() function call, but has to be done
using openlog() and after a call to openlog(), the identity set is used for all
subsequent syslog() calls.
A call to openlog() is only done once in ActivateOptions() and never again,
this causes the observed behavior, that the last instance of
LocalSyslogAppender wins.
A possible fix for this is to add a call to openlog() in Append() before
calling syslog(), like:
{code}
diff --git a/LocalSyslogAppender.cs b/LocalSyslogAppender.cs
--- a/LocalSyslogAppender.cs
+++ b/LocalSyslogAppender.cs
@@ -387,6 +387,8 @@ namespace log4net.Appender
int priority = GeneratePriority(m_facility,
GetSeverity(loggingEvent.Level));
string message = RenderLoggingEvent(loggingEvent);
+ // Call libc openlog() first to ensure correct identity and
facility is set
+ openlog(m_handleToIdentity, 1, m_facility);
// Call the local libc syslog method
// The second argument is a printf style format string
syslog(priority, "%s", message);
{code}
Here is our config for reference:
{code}
[...]
<appender name="rts_syslog" type="log4net.Appender.LocalSyslogAppender">
<facility value="User" />
<identity type="log4net.Util.PatternString" value="foobar/dev/dev1/rts" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss}, %level,
%message%newline" />
</layout>
</appender>
[...]
<appender name="task_info_syslog" type="log4net.Appender.LocalSyslogAppender">
<facility value="User" />
<identity type="log4net.Util.PatternString" value="foobar/dev/dev1/task-info"
/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss}, %level,
%message%newline" />
</layout>
</appender>
[...]
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)