2010-10-27 6 views
3

J'ai les extensions de fichiers FileA, FileB et FileC. FileA J'ajoute à l'élément racine comme je veux qu'il soit un tout attrapé, (plus sur cela ci-dessous). FileB et FileC Je l'utilise pour des messages spécifiques et crée des enregistreurs nommés pour chacun de ces appenders. Dans le code, je charge le journal que je utilise pour la plupart des messages comme ceci:Utilisation de plusieurs enregistreurs de fichiers log4net

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

Les autres enregistreurs, je charge comme celui-ci

private static readonly log4net.ILog commandLog = log4net.LogManager.GetLogger("LoggerFileB"); 

Ce qui se passe est que je reçois ce que je pense à LoggerFileB, c'est-à-dire, UNIQUEMENT les messages spéciaux. Le problème est que ces messages apparaissent aussi dans LoggerFileA, mon catch-all que j'ai ajouté à root. Je pourrais créer une instance nommée spécifique pour le fourre-tout, au lieu de l'ajouter à l'élément racine, mais je veux que le type appelant soit le nom du consignateur dans la sortie. La création d'un enregistreur nommé signifie que% logger renvoie le nom du journal au lieu du type. Existe-t-il un moyen d'obtenir exactement ce que je veux (le catchall montre le nom du logger comme le type, mais ne montre pas les messages enregistrés aux autres loggers nommés)? J'espère qu'il me manque quelque chose et qu'il existe une solution simple.

Voici un exemple de ce à quoi ressemble mon fichier log.config pour cette situation.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <log4net> 
     <appender name="FileA" type="log4net.Appender.RollingFileAppender"> 
      <file value="FileA.txt" /> 
      ...snip... 
     </appender> 
     <appender name="FileB" type="log4net.Appender.RollingFileAppender"> 
      <file value="FileB.txt" /> 
      ...snip... 
     </appender> 
     <appender name="FileC" type="log4net.Appender.RollingFileAppender"> 
      <file value="FileC.txt" /> 
      ...snip... 
     </appender> 
     <root> 
      <level value="ALL" /> 
      <appender-ref ref="LoggerFileA" /> 
     </root> 
     <logger name="LoggerFileB"> 
      <level value="ALL" /> 
      <appender-ref ref="FileB" /> 
     </logger> 
     <logger name="LoggerFileC"> 
      <level value="ALL" /> 
      <appender-ref ref="FileC" /> 
     </logger> 
    </log4net> 
</configuration> 

Répondre

13

Vous pouvez utiliser régler le additivity false:

<logger name="LoggerFileB" additivity="false"> 
+0

Sweet! Merci. J'avais failli abandonner et j'étais sur le point de suivre la route des bûcherons. Content de l'avoir demandé! :) –

+0

Merci Stefan, j'ai eu la même question que Tim et ta réponse m'a aidé! – pelazem

Questions connexes