2012-05-24 94 views
9

在我的Java Swing應用程序我從屬性加載log4j屬性文件存儲在應用程序包和我加載該屬性文件,加載log4j屬性

try {        
    PropertyConfigurator.configure("conf/log4j.properties"); 
    logger.info("Starting the system.");       

} catch (Exception e) { 
    e.printStackTrace(); 

} 

然後我獲得以下錯誤當應用程序啓動時,

log4j:ERROR Could not read configuration file [conf/log4j.properties]. 
java.io.FileNotFoundException: conf/log4j.properties (No such file or directory) 
     at java.io.FileInputStream.open(Native Method) 
     at java.io.FileInputStream.<init>(FileInputStream.java:138) 
     at java.io.FileInputStream.<init>(FileInputStream.java:97) 
     at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297) 
     at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315) 
     at com.bio.ofm.mnu.views.SplashScreen$1.run(SplashScreen.java:70) 
     at java.lang.Thread.run(Thread.java:722) 
log4j:ERROR Ignoring configuration file [conf/log4j.properties]. 
log4j:WARN No appenders could be found for logger (com.bio.ofm.mnu.views.SplashScreen). 
log4j:WARN Please initialize the log4j system properly. 

這種加載屬性文件的方式是錯誤的嗎?請幫忙。

我建立一個.jar文件,並使用該罐子**運行應用程序

+0

您的屬性文件是存儲在文件系統還是存儲在JAR文件中?無論哪種情況,您使用的路徑是否正確?您正在使用相對路徑,這可能(並可能會)導致很多麻煩。 – Jochen

+0

我的屬性文件是在罐子裏 – Harsha

+0

看到迭戈的答案,應該工作。 – Jochen

回答

17

如果CONF是對源文件夾,您可以使用:

PropertyConfigurator.configure("classpath:conf/log4j.properties"); 

否則你可以試試這個:

PropertyConfigurator.configure(this.getClass().getClassLoader().getResource("conf/log4j.properties")); 
3

LogManager自動類會查找名爲的文件或log4j.xml中的classpath用於加載log4j類。直到版本1.2.6,log4j將只在類路徑中查找log4j.properties文件。從版本1.2.7開始,log4j在類路徑中查找log4j.propertieslog4j.xml

只需將log4j文件放在默認包中即可。您還應該確保該文件位於.class的目錄中。

1

我用的是瑞秋Java庫http://rachel.sourceforge.net/很多關於這種東西

下載的lib並將其添加到您的類路徑。然後,您可以像使用它一樣從JAR文件/包加載任何文件,並且在使用JNLP部署的應用程序時也可以使用它。他們有很多很好的教程來閱讀加載文件的最佳方式。我通常喜歡將它們作爲輸入流加載。