139 Stimmen

Konfigurieren Sie Log4net für das Schreiben in mehrere Dateien

Ich möchte ein Protokoll in 2 verschiedene Protokolldateien desselben Prozesses schreiben.

Kann man das mit log4net machen?

Ich muss in jede Protokolldatei separate Meldungen schreiben. Wie kann ich eine Meldung an einen bestimmten Absender schreiben?

215voto

Gary Punkte 3124

Diese Antworten waren hilfreich, aber ich wollte meine Antwort sowohl mit der app.config Teil und der c#-Code-Teil zu teilen, so gibt es weniger Rätselraten für die nächste Person.

<log4net>
  <appender name="SomeName" type="log4net.Appender.RollingFileAppender">
    <file value="c:/Console.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
  </appender>
  <appender name="Summary" type="log4net.Appender.FileAppender">
    <file value="SummaryFile.log" />
    <appendToFile value="true" />
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="SomeName" />
  </root>
  <logger additivity="false" name="Summary">
    <level value="DEBUG"/>
    <appender-ref ref="Summary" />
  </logger>
</log4net>

Dann in Code:

ILog Log = LogManager.GetLogger("SomeName");
ILog SummaryLog = LogManager.GetLogger("Summary");
Log.DebugFormat("Processing");
SummaryLog.DebugFormat("Processing2"));

Hier wird c:/Console.txt "Verarbeitung" enthalten ... und \SummaryFile.log wird "Verarbeitung2" enthalten

88voto

Vinay Sajip Punkte 89444

Ja, fügen Sie einfach mehrere FileAppenders zu Ihrem Logger hinzu. Zum Beispiel:

<log4net>
    <appender name="File1Appender" type="log4net.Appender.FileAppender">
        <file value="log-file-1.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %message%newline" />
        </layout>
    </appender>
    <appender name="File2Appender" type="log4net.Appender.FileAppender">
        <file value="log-file-2.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="File1Appender" />
        <appender-ref ref="File2Appender" />
    </root>
</log4net>

63voto

RichardOD Punkte 28349

Vinay hat recht. Um auf Ihren Kommentar in seiner Antwort zu antworten, können Sie wie folgt vorgehen:

<root>
    <level value="ALL" />
    <appender-ref ref="File1Appender" />
</root>
<logger name="SomeName">
    <level value="ALL" />
    <appender-ref ref="File1Appender2" />
</logger>

So habe ich es in der Vergangenheit gemacht. Dann etwas wie dieses für das andere Protokoll:

private static readonly ILog otherLog = LogManager.GetLogger("SomeName");

Und Sie können Ihren normalen Logger wie folgt erhalten:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

Lesen Sie die Logger und Appenders Abschnitt in der Dokumentation, um zu verstehen, wie das funktioniert.

46voto

Valentin Kuzub Punkte 10967

Ich wollte alle Nachrichten in Root Logger protokollieren und ein separates Protokoll mit Fehlern haben, hier ist, wie es getan werden kann:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="allMessages.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level %logger  - %message%newline" />
        </layout>
    </appender>

    <appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
        <file value="errorsLog.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level %logger  - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="FATAL" />
        </filter>
    </appender>

    <root>
        <level value="ALL" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="ErrorsFileAppender" />
    </root>
</log4net>

Beachten Sie die Verwendung eines Filterelements.

5voto

Rakesh Chaudhari Punkte 2914

Verwenden Sie die folgende XML-Konfiguration, um Protokolle in zwei oder mehr Dateien zu konfigurieren:

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log.txt" />         
      <appendToFile value="true" /> 
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">           
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
     <appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log1.txt" />         
      <appendToFile value="true" /> 
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">        
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="All" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
     <logger additivity="false" name="RollingLogFileAppender2">
    <level value="All"/>
    <appender-ref ref="RollingLogFileAppender2" />
    </logger>
  </log4net>

Die obige XML-Konfiguration wird in zwei verschiedenen Dateien protokolliert. Um eine bestimmte Instanz des Loggers programmatisch zu erhalten:

ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2");

Sie können zwei oder mehr Appender-Elemente innerhalb des log4net Root-Elements anhängen, um in mehreren Dateien zu protokollieren.

Weitere Informationen über die oben genannte XML-Konfigurationsstruktur oder darüber, welcher Appender für Ihre Anwendung am besten geeignet ist, finden Sie unter den folgenden Links:

https://logging.apache.org/log4net/release/manual/configuration.html https://logging.apache.org/log4net/release/sdk/index.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X