2010-12-09 4 views
2

Ich muss Logger konfigurieren, um Nachrichten an mehrere Appender mit unterschiedlichen Log-Levels zu schreiben.Log4net ForwardingAppender Schwelle

Für z. Ich möchte RefreshDataService, um detaillierte Informationen zu TransportFileAppender und Warnungen und Fehler zu RollingFileAppender zu protokollieren.

Außerdem verwende ich Pufferung, um die Protokollierungsleistung zu verbessern. Ich Setup FilteredFileLog Appender, Warnungen an FileLog-> RollingFileAppender weiterleiten.

Aber für RefreshDataService Logger, alle Protokollmeldungen einschließlich Debug und Info in FileLog protokolliert werden.

Können Sie mir helfen, den Logger RefreshDataService so zu konfigurieren, dass nur Warn + -Nachrichten an FileLog protokolliert werden? Vielen Dank.

Unten ist ein Auszug aus meiner log4net-Konfiguration.

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="${TEMP}\logs\client\${ENV}\client.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="4096KB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level [%property{ENV}] [%property{UID}] %logger - %message%newline" /> 
    </layout> 
</appender> 

<appender name="TransportAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="${TEMP}\logs\client\${ENV}\client.comm.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="4096KB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
    </layout> 
</appender> 


<appender name="DetailedTransportLog" type="log4net.Appender.BufferingForwardingAppender"> 
    <threshold value="DEBUG" /> 
    <bufferSize value="200" /> 
    <appender-ref ref="TransportAppender" /> 
</appender> 

<appender name="FileLog" type="log4net.Appender.BufferingForwardingAppender"> 
    <bufferSize value="20" /> 
    <lossy value="false" /> 
    <appender-ref ref="RollingFileAppender" /> 
</appender> 

<appender name="FilteredFileLog" type="log4net.Appender.ForwardingAppender"> 
    <threshold value="WARN" /> 
    <appender-ref ref="FileLog" /> 
</appender> 

<logger name="RefreshDataService" > 
    <level value="DEBUG" /> 
    <appender-ref ref="FilteredFileLog" /> 
    <appender-ref ref="DetailedTransportLog" /> 
</logger> 

Antwort

1

Sie können einen Pegelbereich Filter auf dem Appen verwenden:

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="WARN" /> 
    <levelMax value="FATAL" /> 
</filter> 
<filter type="log4net.Filter.DenyAllFilter" /> 

Mein Verständnis ist, dass die Threshold Eigenschaft verwendet wird, um die appender sagen den Puffer, wenn Nachrichten von einem bestimmten Niveau zu spülen angemeldet sind. Auf diese Weise können Sie beispielsweise sicherstellen, dass Fehler sofort in die Datenbank geschrieben werden.