2010-06-09 8 views
16

J'utilise un RollingFileAppender pour vous connecter quelques informations à un fichier avec un conversionPattern (dans le web.config) qui ressemble à ceci l'en-tête de chaque section du journal:Est-ce que Log4net peut avoir plusieurs appenders dans le même fichier?

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

Je voudrais vous connecter détails sous cet en-tête sous forme de puces. J'essaie actuellement d'utiliser un autre RollingFileAppender qui se connecte au même fichier avec un simple conversionPattern de juste un tableau de bord, comme ceci:

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

Mais ces messages ne font pas dans le fichier journal. J'utilise Log.Info() pour l'en-tête et Log.Debug() pour les points et le filtrage de chaque appender sur leurs niveaux de journal respectifs. Est ce que j'essaye de faire possible? Ou existe-t-il un meilleur moyen d'obtenir des informations d'en-tête et de détail dans un fichier journal de log4net?

Répondre

32

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

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

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

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

Voici un XML exemple qui utilise deux appenders écriture 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> 

Cela peut être trouvé dans la documentation Apache ici: Apache Log4Net Docs il suffit de chercher sur cette page pour ' même fichier '.

Espérons que cela aide.

+0

Notez que seules les versions récentes de log4net ont ce paramètre Xml LockModel et la classe MinimalLock. aucune erreur ne sera lancée, mais cela ne fonctionnera pas. –

1

Vous pouvez vous rendre compte s'il y a un problème avec log4net en vérifiant la fenêtre de sortie sur Visual Studio. La bibliothèque enregistre les erreurs là, très utile pour détecter les erreurs de configuration.

+0

Malheureusement, aucune erreur ne se produisait qui pourrait m'aider :( – adam0101

+0

vous avez exécuté le code pour configurer log4net, n'est-ce pas? –