2015-11-03 15 views
5

Desidero utilizzare LogicalThreadContext per passare alcune informazioni di contesto nel mio servizio WCF. Devo passare diverse proprietà. In C# che ha il codiceRimuovi le proprietà del sistema log4net dall'output

LogicalThreadContext.Properties["MyProperty"] = 1; 

In log4net config ho

<log4net> 
<appender name="RollingLogFileAppenderSize" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs\Log.log" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <datePattern value="yyyyMMdd" /> 
    <maxSizeRollBackups value="3" /> 
    <maximumFileSize value="5MB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d [%2t] [%property] %level %m%n" /> 
    </layout> 
</appender> 
<root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingLogFileAppenderSize" /> 
</root> 
</log4net> 

E nel registro ho ottenuto

2015-11-03 16:24:36,313 [10] [{MyProperty=1, log4net:Identity=, log4net:UserName=User, log4net:HostName=User}] INFO - Info 

Non voglio avere proprietà di sistema log4net: Identità, log4net : UserName e log4net: HostName nel registro. Come fare questo? Posso scrivere config come questo

Ma ho diverse proprietà nel codice e voglio vedere solo le proprietà che ho aggiunto. Codice

LogicalThreadContext.Properties.Remove("log4net:UserName"); 

non funziona.

+0

Puoi mostrare la configurazione completa? – stuartd

+0

Aggiunto in questione –

risposta

3

Ho scoperto che è possibile rimuovere solo log4net: proprietà HostName con codice GlobalContext.Properties.Remove(LoggingEvent.HostNameProperty). log4net: Identity e log4net: UserName non può essere rimosso a causa del metodo CreateCompositeProperties nella classe log4net.Core.LoggingEventhttps://github.com/apache/log4net/blob/trunk/src/Core/LoggingEvent.cs. Aggiunge queste proprietà senza alcuna condizione e quindi non è possibile rimuoverle per l'ultima versione di log4net.

0

Ho avuto lo stesso problema.

GlobalContext.Properties.Clear(); 

Ha funzionato per me.