2010-12-09 41 views
2

J'ai besoin de configurer le logger pour écrire des messages à plusieurs appenders avec différents niveaux de log.log4net ForwardingAppender threshold

Par ex. Je veux RefreshDataService pour enregistrer des informations détaillées à TransportFileAppender et des avertissements et des erreurs à RollingFileAppender.

En outre, j'utilise la mise en mémoire tampon pour améliorer les performances de journalisation. J'ai configuré FilteredFileLog pour transférer les avertissements vers FileLog-> RollingFileAppender. Mais pour l'enregistreur RefreshDataService, tous les messages de journal y compris le débogage et les informations sont consignées dans FileLog.

Pouvez-vous m'aider à configurer le logger RefreshDataService pour consigner uniquement les messages Warn + dans FileLog? Merci.

Vous trouverez ci-dessous un extrait de ma configuration log4net.

<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> 

Répondre

1

Vous pouvez utiliser un filtre de plage de niveau sur le appender:

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

Ma compréhension est que la propriété Threshold est utilisé dire appender pour vider le tampon lorsque les messages d'un certain niveau sont enregistrés. De cette façon, vous pouvez faire en sorte que les erreurs soient écrites immédiatement dans la base de données.