2010-12-07 137 views
4

我對log4j很新,所以請溫和。但是這裏發生了什麼,我不知道爲什麼:它正確地記錄到一個文件,但創建的日誌的文件名似乎是錯誤的。Log4j日誌記錄到log4j.log而不是指定的文件名

這裏是我的log4j的配置:

<?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"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] %m%n"/> 
    </layout> 
</appender> 


<appender name="file" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="log/messagecount.log" /> 
    <param name="Append" value="true" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] - %m%n"/> 
    </layout>   
</appender>  

<root> 
    <level value="debug"/>  
    <appender-ref ref="file"/> 
    <!-- <appender-ref ref="rolling"/> --> 
</root> 

</log4j:configuration> 

它創建日誌文件夾,而不是messagecount.log文件下log4j.log文件。 那個價值財產不是做我認爲它做的?

這是我的初始化記錄器:

類級別的變量:

private static Logger logger = Logger.getLogger(MessageCount.class); 

而且init函數:

private void initLogger() throws IOException { 

    Properties props = new Properties(); 
    props.load(getClass().getResourceAsStream("/log4j.xml")); 
    PropertyConfigurator.configure(props); 

    logger.info("----------Logger init-----------") ; 

//  logger.debug("Sample debug message"); 
//  logger.info("Sample info message"); 
//  logger.warn("Sample warn message"); 
//  logger.error("Sample error message"); 
//  logger.fatal("Sample fatal message"); 

} 

的的log4j.xml配置文件是在根我的src文件夾。

謝謝

+1

您不需要該init函數。刪除它。只需將`log4j.xml`放入應用程序的類路徑中(bin或build文件夾,它將不會在src文件夾中找到),並且您的應用程序會自動找到它。 – darioo 2010-12-07 18:09:58

回答

0

Got it!這是發生了什麼,我想首先感謝darioo和dogbane的答案/評論,因爲他們幫我弄明白了。

不需要init函數。並且使用-Dlog4j.debug = true作爲JVM參數向我顯示它已經加載了位於bin文件夾中的xml配置文件的一些副本。

因此,如果我擺脫了init函數,並將正確的配置xml在bin文件夾中,它的工作原理。

0

我做你的XML文件的副本&糊,對於初學者來說,因爲這個文件是不是有效的XML配置的log4j拋出一個錯誤。您忘記添加

</log4j:configuration> 

作爲最後一行。這可能是你問題的根源嗎?

修復此問題後,log4j啓動正常,並正確創建一個名爲log/messagecount.log的文件。

我正在使用log4j 1.2.15。如果您的設置不一樣,請嘗試發佈您的log4j版本和您的環境。另外,嘗試命名文件的方式不同,如log/somelog.logsomelog.log,這樣您就可以看到log4j的行爲。

+0

哎呀!複製粘貼錯誤。另外,我今天得到了log4j,離開了他們的網站,所以它的版本是1.2.16 – CrazyPenguin 2010-12-07 17:48:36

2

適合我。

嘗試將-Dlog4j.debug=true添加到您的JVM參數中,以獲取有關log4j正在執行的操作以及爲什麼要登錄到log4j.log的更多信息。

相關問題