2011-09-02 59 views
1

我有小問題,我的log4j.xml配置步驟如下問題的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> 

,當我調用log.info的com.alsodeep封裝內部(「一些信息」)它印出兩次,例如

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 

我很困惑這個,我的log4j設置有什麼問題。

PS當我從根元素中刪除appender時,一切正常,我的日誌信息只出現一次。

回答

5

刪除:

<appender-ref ref="console" /> 

從特定的記錄儀,只留下一個在根記錄:

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

你的配置是有效的,但是當你嘗試登錄的東西上com.alsodeep,它首先獲取附加器到與此記錄器直接相關的appender,然後向上傳播。 com沒有關聯的appender,但是root(所有記錄器的父項)具有。巧合的是它是相同的控制檯appender,所以它被附加兩次。

+0

謝謝,它真的很有幫助 –

2

另一種可能的答案:(假設你的例子是從一個更復雜的記錄器/附加器方案簡體)

您可以在每個記錄的additivitysee the "Appenders and Layout" section)屬性設置爲false。這將防止日誌事件沿着記錄器層次結構傳播。