2011-09-02 4 views
1

j'ai petite question, ma configuration log4j.xml est ci-dessousproblème avec la configuration log4j xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n" /> 
     </layout> 
    </appender> 
    <logger name="com.alsodeep"> 
     <level value="info" /> 
     <appender-ref ref="console" /> 
    </logger> 
    <logger name="org.springframework"> 
     <level value="error" /> 
     <appender-ref ref="console" /> 
    </logger> 
    <root> 
     <priority value="error" /> 
     <appender-ref ref="console" /> 
    </root> 

</log4j:configuration> 

et quand j'appelle un log.info (« quelques informations ») à l'intérieur du paquet com.alsodeep il imprimé deux fois, par exemple

INFO AspectExample - Call it before method 
INFO AspectExample - Call it before method 
Hello 
INFO AspectExample - Call it after method 
INFO AspectExample - Call it after method 
List content [[23, 243, 234, 23432]] 
INFO App - final 
INFO App - final 

je suis confondu avec cela, ce qui est erroné avec mes paramètres log4j. Post-scriptum Lorsque je supprime appender de l'élément racine, tout est OK et mes informations de journal n'apparaissent qu'une seule fois.

Répondre

5

Supprimer:

<appender-ref ref="console" /> 

des bûcherons particuliers et ne laisser qu'un seul enregistreur de racine:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n" /> 
     </layout> 
    </appender> 
    <logger name="com.alsodeep"> 
     <level value="info" /> 
    </logger> 
    <logger name="org.springframework"> 
     <level value="error" /> 
    </logger> 
    <root> 
     <priority value="error" /> 
     <appender-ref ref="console" /> 
    </root> 

</log4j:configuration> 

Votre configuration est valide, mais quand vous essayez de vous connecter quelque chose sur com.alsodeep, il obtient d'abord appender à l'appender associé directement à cet enregistreur, puis se propage. com n'a aucun appender associé, mais root (parent de tous les enregistreurs) a. Par coïncidence, c'est le même appender de console, donc il est ajouté deux fois.

+0

merci, c'est vraiment utile –

2

Une autre réponse possible: (en supposant que votre exemple a été simplifié d'un système enregistreur/appender plus complexe)

Vous pouvez définir l'attribut additivity (see the "Appenders and Layout" section) sur chaque enregistreur à false. Cela empêchera l'événement de journal de propager la hiérarchie du journal.

Questions connexes