2013-11-22 30 views
4

我試過使用log4j loger作爲我的簡單項目。log4j.xml - WARN無法找到記錄器的appender

但是當我運行項目毫無遺漏的我在strainge從控制檯log4j的警告:

log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

我無法弄清楚到底爲什麼發生這種情況。

我加入下載使用Maven log4j的都應該工作。

我指定apeender,我的腦海裏確定它應該正常工作。
但你可以看到它不是。

這裏是我的log4j.xml內容:

<!-- Appenders --> 
<!-- Loggin into console --> 
<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 - %m%n" /> 
    </layout> 
</appender> 
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="file" value="/logs/log.log" /> 
    <param name="DatePattern" value="'.'yyyy-MM-dd" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p (%F:%L:%M) %c{1} - %m%n" /> 
    </layout> 
</appender> 

<!-- Root logger --> 
<root> 
    <priority value="info" /> 
    <appender-ref ref="file" /> 
    <appender-ref ref="console" /> 
</root> 

<!-- Application Loggers --> 
<logger name="com.softserve.edu"> 
    <level value="info" /> 
</logger> 

我錯過了非標準的頁眉和頁腳(標籤)。

一個滑溜溜的是,這個文件到logs文件夾不存在(我猜log4j會自己創建它)。

這裏是我的項目struckture:

project struckture

UPDATE:

src/test/resources下創建新文件夾,移動log4j.xml成。

現在所有這些警告都可以,但log文件未創建。

這條線有什麼問題<param name="file" value="/logs/log.log" />

  • 如何解決這個問題?

回答

2

您的log4j.xml文件需要進入src/main/resources目錄。 Log4J期望在類路徑的根目錄找到它。

資源目錄是放置所有不是Java代碼但是想要進入類路徑的地方。如果只是測試應該使用的東西,把它放在src/test/resources中,否則使用src/main/resources。

+0

這真的很有幫助,但存在一些其他麻煩。我更新了問題。你能幫助解決這個問題嗎?我看起來對我來說很好... –

2

我最終努力自己回答這個問題,所以:從l0g4j網站,這是一個FAQ,這個錯誤實際上指向你。

http://logging.apache.org/log4j/1.2/faq.html#noconfig

當你知道(但誰碰到這個常見的錯誤絆倒外行):一個appender是在輸出去。您可以擁有控制檯Appenders,文件Appenders以及其他所有在方向中詳細說明的內容。

當log4j告訴你它沒有註冊Appender時,它告訴你輸出無處可去。這就是爲什麼,大概你的應用程序是沉默的,除了錯誤。

鑑於你確實指定了Appenders,錯誤實際上可能只是少數幾件事之一。

如果Appender在某種程度上是畸形的,你會期望看到一個Parsing異常,所以這可能不是問題。

但是,如果無法找到日誌配置文件全部.....你會看到這個問題!很可能你的應用程序根本看不到配置文件,並試圖採取默認設置。

你怎麼能得到這個狀態包括:

  • 不遵守maven的約定,或提供一個可選的配置。 (在Nathan Hughes的答案中找到了解決方案)。
  • 指定一個看起來正確的Maven配置(足以讓Maven運行)但不能做你認爲它做的事。
  • 配置的Log4j的代碼來尋找一個文件,它是不是應用

可見當你把文件放入./src/main/resources Maven的實際捆綁logger.xml放進玻璃瓶。它把它放在類路徑上,這是記錄器默認查找的地方(顯然這個jar在類路徑中)。

但是,許多用戶不希望看到他們的「二進制」罐子內的包裝在內的日誌記錄配置。如果必須重新編譯,或者本質上是在一個zip文件內部就地編輯一個配置,那麼配置日誌級別有什麼意義?所以,對於Nathan Hughes的許多答案來說,這是一個無法回答的問題,這就是爲什麼它值得談論其他情況。

如果你已經用jar打包了你的配置文件,那麼這個軟件沒有在正確的位置上看。如果你自己做了任何移動文件的工作,那麼你可能已經隱藏了自己的log4j.xml文件。

但是,很可能您使用maven約定./src/main/config/log4j.xml打包文件。如果是這種情況,那麼問題是您的軟件沒有配置爲查找它。

一種方法是調用您的應用程序

-Dlog4j.configuration=file:conf/log4j.xml 

時,如果你的硬編碼(我不是)某處在你的代碼的風扇來指定命令行上,應該是一個電話

對於.properties文件:

File log4jfile = new File("./conf/log4j.properties"); 
PropertyConfigurator.configure(log4jfile.getAbsolutePath()); 

對於.xml文件:

DOMConfigurator.configure("file:///conf/log4j.xml"); 
Logger log = Logger.getLogger(YourClass.class); 
相關問題