log4net – Logging in verschiedene Dateien

Veröffentlicht von

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.

Download des Beispielprojekts

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.