2013-08-16 44 views
0

Logger.getRootLogger().getAppender("CONSOLE")在一個類中返回null,但它可以登錄到控制檯。 getAllAppenders()也在這個類中返回NullEnumeration。log4j調試不記錄到任何配置的appender

在另一個類(MyClass)中日誌級別:DEBUG |可加性:true |父:root | getAllAppenders():NullEnumeration 但log.debug沒有給控制檯打印任何東西。該類log4j的 配置

<logger name="com.xxx.service.impl.MyClass"> 
    <level value="TRACE"/> 
</logger> 

試圖調試爲什麼調試消息沒有在很多方面,但白白得到打印。

如何深入檢查此類的log4j配置以及可能存在的問題,請幫助我。

+1

沒有這個參數 「-Dlog4j.debug =真」。添加它並與它一起運行。它會說如果啓動時有任何log4j屬性文件 – Neron

+0

@Neron感謝您的評論。我也嘗試過這個選項。根據log4j調試日誌記錄器正在使用我想要的配置文件(log4j.xml),並且所有appender都已正確初始化(文件appender具有適當的日誌文件),並且某些類可以將日誌打印到所有appender,並且某些類可以't,MyClass如上所述。我也爲MyClass記錄器添加了特定的appender-ref。沒有任何變化。 – pavan

回答

0

在web.xml中添加下面的監聽器解決了我的問題。它配置我期望的log4j.xml和log4j記錄正常。

<context-param> 
     <param-name>log4jConfigLocation</param-name> 
     <param-value>classpath:log4j.xml</param-value> 
    </context-param> 

    <!-- applies log4j configuration --> 
    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
1

起初,U應設置爲假加參數,以確保每個類是寫它的日誌到一個log4j的文件:

log4j.additivity $ {} APPENDARNAME = FALSE

並確保只有一個log4j技術與你的應用程序一起加載(我對基本員工只使用log4j)

確保沒有log4j.xml或log4j.properties文件位於任何類路徑文件夾下,但是您希望被加載。如果這是一個可能性,強制應用程序使用你的。對於彈簧:

<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" > 
    <property name="staticMethod"> 
     <value>org.springframework.util.Log4jConfigurer.initLogging</value> 
    </property> 
    <property name="arguments"> 
     <list> 
      <value>file:${log4jFile}</value> 
     </list> 
    </property> 
</bean> 
相關問題