web-dev-qa-db-fra.com

Configurer Log4net pour écrire dans plusieurs fichiers

J'aimerais écrire le journal dans 2 fichiers journaux différents du même processus.

est-ce que c'est possible de faire en utilisant log4net?

J'aurai besoin d'écrire des messages séparés dans chaque fichier journal. Comment puis-je écrire un message à un appender spécifique?

123
ofer

Oui, ajoutez simplement plusieurs FileAppender à votre enregistreur. Par exemple:

<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>
76
Vinay Sajip

Ces réponses ont été utiles, mais je voulais partager ma réponse à la fois avec la partie app.config et la partie code c #, afin que la personne suivante devine moins.

<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>

Puis en code:

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

Ici c: /Console.txt contiendra "Processing" ... et\SummaryFile.log contiendra "Processing2"

186
Gary

Vinay est correct. En réponse à votre commentaire dans sa réponse, vous pouvez le faire comme suit:

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

C'est comme ça que je l'ai fait dans le passé. Ensuite, quelque chose comme ceci pour l'autre journal:

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

Et vous pouvez obtenir votre enregistreur normal comme suit:

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

Lisez la section enregistreurs et ajouts de la documentation pour comprendre comment cela fonctionne.

59
RichardOD

Je voulais enregistrer tous les messages dans le logger racine et créer un journal séparé avec des erreurs. Voici comment procéder:

<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>

Notez l'utilisation de l'élément filtrant.

39
Valentin Kuzub

Utilisez la configuration XML ci-dessous pour configurer les journaux dans deux fichiers ou plus.

<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>

La configuration XML ci-dessus se connecte dans deux fichiers différents.

Pour obtenir une instance spécifique de l’enregistreur par programme,

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

Vous pouvez ajouter deux éléments appender ou plus dans l'élément racine log4net pour vous connecter à plusieurs fichiers.

Plus d'informations sur la structure de configuration XML ci-dessus ou sur l'appender qui convient le mieux à votre application, lien de détail de détail situé en dessous,

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

J'espère que cela aidera.

0
Rakesh Chaudhari