2017-05-15 3 views
1

Ich habe ein C# Framework 4.5.2 Projekt mit log4net v2.0.8 (installiert über NuGet), und ich habe mindestens zehn verschiedene, aber ähnliche Fragen und keine gelesen von ihnen haben mein Problem gelöst. Sicher, ich kann erfolgreich in meine Log Appender schreiben, aber die Filterung/Schwelle funktioniert nicht. Ich habe einen einzelnen Logger (entweder mit ROOT oder einer benannten Instanz) und habe verschiedene Schwellenwerte/Filter gesetzt, die die tatsächliche Protokollierung auf einen bestimmten Appender (d. H. Datei, db, smtp usw.) richten sollten. Auf diese Weise kann ein bestimmter Filterwert nur von einem einzigen Appender verarbeitet werden. Zum Testen versuche ich einfach, die Schwellenwerte für Warnung und höher für die Verwendung des ADO-Appenders zu verwenden, während der Dateiappender die Info-Schwelle (und darüber) protokolliert. Wenn ich also eine Info-Log-Methode teste, sollte sie nicht in der Datenbank enden, aber sie tut es immer. Also, irgendwie habe ich die Konfiguration falsch. Hier sind nur ein paar, die ich geschaut haben durch, und sie haben mir einen Einblick gegeben, aber keine Lösung:Noch ein Problem mit der Konfiguration von log4net. Root-Logger (oder Single, namens Logger) mit verschiedenen Schwellenwerten

Hier einige Code:

Konfiguration :

<!--<root>  
</root>--> 
<logger name="Logger"> 
    <appender-ref ref="LogFileAppender"/>   
    <appender-ref ref="AdoNetAppender"/>   
</logger> 

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="c:\temp\logging\derp.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="5" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %level %property{ProjectName} (%logger) - %message%newline" /> 
    </layout> 
    <!--<threshold value="Info" />--> 
</appender> 

Ich habe versucht, havin g ein Schwellenwert innerhalb der appender-ref der Logger-Sektion, ich hatte es direkt im Appender. Ich habe LevelMatchfilter mit Level und LevelMin/LevelMax verwendet (siehe unten). LevelRangeFilter, nichts. Nichts funktioniert richtig.

<filter type="log4net.Filter.LevelMatchFilter"> 
    <levelMin value="Warning" /> 
    <levelMax value="Fatal" /> 
</filter> 
<threshold value="Warning" /> 

Ich habe versucht, Evaluator zu integrieren, und das funktioniert nicht.

<evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="ERROR" /> 
</evaluator> 

Die meisten Online-Beispiele sind über 5 Jahre alt und sprechen oft über v1.2. Gibt es etwas in der neueren Version, oder verpasse ich gerade etwas anderes oder mache ich es in der falschen Reihenfolge? Jede Hilfe wird geschätzt. Vielen Dank!

Antwort

1

Ich sehe zwei Dinge. Erstens, es ist WARN, nicht Warnung.

<filter type="log4net.Filter.LevelMatchFilter"> 
    <levelMin value="WARN" /> 
    <levelMax value="Fatal" /> 
</filter> 

Zweitens, fügen Sie die Wurzel wie folgt hinzu.

<root> 
    <level value="ALL" /> 
    <appender-ref ref="LogFileAppender" /> 
    <appender-ref ref="AdoNetAppender" /> 
</root> 
Verwandte Themen