Peut Log4net plusieurs appenders écrire dans le même fichier?

J'utilise un RollingFileAppender pour enregistrer des informations dans un fichier avec un modèlede conversion (dans le web.de configuration) qui ressemble à ça pour l'en-tête de chaque section journal:

<conversionPattern value="%date - %property{userId} - %property{method}%newline--------------------------------%newline%message%newline%newline"/>

j'aimerais enregistrer les détails sous cet en-tête comme points de repère. Je suis en train d'essayer d'utiliser un autre RollingFileAppender qui se connecte au même fichier avec un simple modèlede conversion d'un simple tiret, comme ceci:

<conversionPattern value="- %message%newline"/>

Mais ces messages ne sont pas dans le fichier journal. Je suis à l'aide d' Log.Info () pour l'en-tête et le Log.Debug () pour les points de puce et le filtrage de chaque appender sur leurs niveaux de log respectifs. Ce que j'essaie de faire est-il possible? Ou y a-t-il une meilleure façon d'obtenir des informations d'en-tête et de détails dans un fichier journal à partir de log4net?

16
demandé sur adam0101 2010-06-10 02:18:02

2 réponses

Oui vous pouvez avoir deux appendeurs log4net qui ajoutent (écrivent) au même fichier journal.

Vous devez placer la ligne suivante dans chacun de vos Appenders:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

ceci fera que log4net utilisera un modèle de verrouillage minimal qui permet à plusieurs processus d'écrire dans le même fichier.

voici un exemple de XML qui utilise deux appenders écrivant dans le même fichier journal:

<log4net debug="false">
<appender name="RollingLogFileAppender1" type="log4net.Appender.RollingFileAppender">
  <!-- this configures a log for the application messages -->
  <file value="TestLog.log" />
  <appendToFile value="true" />
  <!-- next line uses a minimal locking model that allows multiple processes to write to the same file -->
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <!-- make the most recent log the highest numbered log -->
  <countDirection value="1" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] %message%newline [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline" />
  </layout>
  <!-- The following two filters insure only log requests of 
        version '1' use this Appender -->
</appender>
<appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
  <file value="TestLog.log" />
  <appendToFile value="true" />
  <!-- next line uses a minimal locking model that allows multiple processes to write to the same file -->
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <!-- make the most recent log the highest numbered log -->
  <countDirection value="1" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline%message" />
  </layout>
</appender>
<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender1" />
  <appender-ref ref="RollingLogFileAppender2" />
</root>

ceci peut être trouvé dans la documentation Apache ici: Apache Log4Net Docs Il suffit de rechercher sur cette page 'même fichier'.

J'espère que cela vous aidera.

32
répondu Steve 2011-01-26 18:46:33

vous pouvez vous rendre compte s'il y a un problème avec log4net vérifiant la fenêtre de sortie sur visual studio. Les erreurs de journalisation de la bibliothèque sont très utiles pour détecter les erreurs de configuration.

1
répondu Claudio Redi 2010-06-09 22:39:45