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.