Ho un programma che effettua molte chiamate log4net ai logger "myprogram". Chiama anche un altro codice che effettua chiamate log4net ad altri logger. Voglio catturare tutti i registri superiori a INFO per "mioprogram" e tutti i registri superiori a WARN per tutto il resto. In questo modo, ottengo i messaggi di work-in-progress specifici per l'attività su cui sto lavorando, ma mi viene comunque notificata la presenza di eventi potenzialmente dannosi nel codice di supporto. Voglio che venga inviato a entrambi Console e un file di registro.Eliminare la registrazione duplicata in log4net
Ho la seguente configurazione log4net:
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</logger>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
</appender>
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
</layout>
<appendToFile value="false" />
<staticLogFileName value="true" />
<rollingStyle value="Once" />
<file value="mylogfile" />
<immediateFlush value="true" />
<threshold value="INFO" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>
Questo ha perfettamente senso per me: log> WARN per tutto e> INFO per la specifica "myprogram" logger.
Il problema è che sto ricevendo messaggi INFO registrati due volte su Console e LogFile. Questo succede solo se ho entrambi gli elementi <root>
e <logger>
riempiti; se rimuovo uno dei due, il rimanente funziona come mi aspetto.
Ho potuto capire se stavo registrando due volte le voci WARN (poiché il mio programma corrisponde sia a "root" che a "mioprogramma"), ma sta accadendo su INFO anche se ROOT è (presumibilmente) impostato su WARN.
Sto facendo qualcosa di sbagliato qui, o si tratta di un bug/ambiguità log4net?
Questo ha funzionato bene per me quando ho riscontrato lo stesso problema. Questo evita anche il problema dell'additività –
Questa è la risposta corretta. I logger ereditano gli allegati da root. Grazie! –
@Jeffrey sei consapevole di quali sono i problemi con l'utilizzo di additività? Non ho avuto successo nel trovare qualcosa di documentato di cui Google sia a conoscenza. – Tinister