2012-01-18 70 views
11

我已經做了我最好的設置Eclipse和我的Java應用程序工作中使用一個log4j.properties文件。但是,它似乎沒有使用屬性文件,我不知道爲什麼。Java應用程序:獲得的Log4j在Eclipse環境

庫:SLF4J-API-1.6.1,SLF4J-jdk14-1.6.1

在記錄工作正常的應用程序。我可以在eclipse控制檯中打印信息,警告和錯誤。

我想做什麼就能做的是日誌級別的所有消息記錄更改爲調試和打印到控制檯和一個日誌文件兩者。

我創建了一個log4j.properties文件看起來像這樣:

log4j.rootLogger=DEBUG,console,file 
log4j.rootCategory=DEBUG, R, O 

# Stdout 
log4j.appender.O=org.apache.log4j.ConsoleAppender 

# File 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=log4j.log 

# Control the maximum log file size 
log4j.appender.R.MaxFileSize=100KB 

# Archive log files (one backup file here) 
log4j.appender.R.MaxBackupIndex=5 
log4j.appender.file.File=checkLog.log 
log4j.appender.file.threshold=DEBUG 

log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.O.layout=org.apache.log4j.PatternLayout 

log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n 
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n 

我的目錄結構是這樣的:

My Project 
--src/ 
----MYProject/ 
------*.java 
--bin/ 
----MYProject/ 
------*.class 
--log4j/ 
----log4j.properties 

在Eclipse我去: 運行配置 - >類路徑(標籤) - >右鍵點擊了「用戶條目」 - >添加「的log4j」作爲一個新的文件夾」,並保存

然後在我的代碼,我這樣調用記錄器(SA mple代碼以證明我的做法,因此可能有語法錯誤):

package MYProject; 
import org.slf4j.LoggerFactory; 

public class MyClass{ 

    final org.slf4j.Logger test_logger = LoggerFactory.getLogger(MyClass.class); 

    public MyClass(){} 

    public someMethod(){ 
    test_logger.debug("Some Debug"); 
    test_logger.info("Some Info"); 
    test_logger.warn("Some Warning"); 
    test_logger.error("An Error"); 
    } 

} 

然後我打電話的someMethod和它打印INFO,WARN,ERROR到Eclipse控制檯。它不會打印DEBUG,也不會打印到文件。

我會很感激的是我可能會做錯任何建議。

回答

14

有可能在未來的log4j.properties的類路徑另一log4j.propertieslog4j.xml文件。打開項目的運行配置,並將-Dlog4j.debug=true作爲項目的虛擬機參數。這將指示log4j在控制檯上打印很多附加信息,包括它正在使用的配置文件。

+1

我已經玩過你的評論和apines,這是我已經想通了。 我無法添加PropertyConfigurator與我當前的設置,因爲它是log4j庫的屬性,而不是slf4j-jdk14(slf4j的log4j活頁夾,據我瞭解)庫的一部分。將VM參數設置爲true不會返回任何額外的調試。 – Bryce 2012-01-18 16:48:10

+0

如果我再引用除了slf4j-jdk14之外的實際log4j庫,我開始獲取調試輸出。只需添加引用就可以使我的log4j.properties文件開始工作。這似乎使我獲得了我需要的90%左右。這增加了調試,但是我在初始文章中給出的類中打印的命令不再打印(test_logger.debug,test_logger.info等)。我認爲這是因爲我添加的log4j庫覆蓋了我以前使用的org.slf4j.Logger。我對如何讓這兩個庫在一起更好地工作有點困惑,有什麼建議嗎? – Bryce 2012-01-18 16:48:30

+1

slf4j僅僅是一個記錄的外觀,你仍然需要添加實際的日誌庫(在你的情況下是log4j)到你的類路徑中。看到這個鏈接:http://slf4j.org/manual.html#binding – 2012-01-18 16:53:48

2

你需要告訴你的代碼使用屬性文件。任何記錄完成之前請把

PropertyConfigurator.configure("log4j/log4j.properties"); 
3

如果您使用的是日誌的外觀SLF4J,那麼你需要通過包括該後端相應的jar文件精確指定一個記錄後端。在你的情況下,你已經在你的classpath上安裝了slf4j-jdk14-x.x.x.jar,這只是一個通用的日誌記錄器後端。

爲了使用log4j的後端,你需要刪除slf4j-jdk14-x.x.x.jarslf4j-log4j12-x.x.x.jar更換。如果你不刪除它,slf4j必須只選擇一個後端jar,可能不是你想要的。

當然,你還需要在classpath實際log4j-x.x.x.jar文件了。

一旦這些罐是適當地就位,那麼-Dlog4j.debug的VM參數將實際工作,並在調試您的日誌CONFIGS都來自有用。

0

您的目標目錄中可能有舊版本。 清理項目並重試。

除此之外,如果您未通過eclipse添加log4j.properties,則應確保您刷新了eclipse項目

0

在路徑項目屬性/庫選項卡中刪除jre(JRE系統庫)項目並重新設置jre!

+0

您能詳細解釋一下您提供的解決方案嗎? – abarisone 2015-06-24 11:54:00

相關問題