[ 
https://issues.apache.org/jira/browse/LOG4NET-458?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stefan Bodewig resolved LOG4NET-458.
------------------------------------
       Resolution: Pending Closed
    Fix Version/s: 1.3.0

Thanks, Christian!

patch committed as svn revision 1678858

> 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
>             Fix For: 1.3.0
>
>         Attachments: localsyslog.patch
>
>
> 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)

Reply via email to