Mehre Logdateien mit log4net in einer Anwendung verwenden.
Nicht immer soll alles in einer Log-Datei landen. In diesem Artikel wollen wir, zusätzlich zum Hauptlogfile, ein weiteres Logfile anlegen. In diese Datei wandern dann bestimmte Log-Nachrichten, welche im Hauptlogfile nicht mehr auftauchen sollen.
Legen wir los!
Beginnen wir mit einem einfachen Beispiel für unsere Anwendung. Die normale Log-Datei:
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="app.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 %logger - %message%newline" />
</layout>
</appender>
Zusätzlich wollen nun eine zweite Log-Datei in der Konfigurationsdatei anlegen:
<appender name="customLogAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="custom.log" />
<encoding value="utf-8" />
<staticLogFileName value="true"/>
<datePattern value=".yyyyMMdd.'log'" />
<rollingStyle value="Date" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger: %message%n" />
</layout>
</appender>
<logger name="CustomLog">
<level value="Info" />
<appender-ref ref="customLogAppender" />
</logger>
Der Logger wird unabhängig vom root, als eigener Logger angelegt. Der Name lautet „CustomLog“. Diesen werden wir in der Anwendung verwenden, um speziell in diese Log-Datei zu schreiben:
LogManager.GetLogger("CustomLog").Info("HelloWorld");
Das Ergebnis sehen wir nun in der Log-Datei (custom.log):
2018-11-06 09:46:40,737 [1] INFO CustomLogAppender: HelloWorld
Die Log-Nachricht taucht auch noch im Haupt-Log der Anwendung auf. Sofern dies nicht gewünscht ist, kann man dies mit einem Filter unterbinden. Dieser Filter wird innerhalb des Appenders file eingefügt:
<filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="CustomLog" /> <acceptOnMatch value="false" /> </filter>
Durch diesen werden die „CustomLog“ Nachrichten ausgefiltert und dort nicht mehr erfasst.
