在我的java swing应用程序中,我从存储在应用程序包中的属性文件中加载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文件并使用该jar运行应用程序**
答案 0 :(得分:18)
如果conf是您可以使用的源文件夹:
PropertyConfigurator.configure("classpath:conf/log4j.properties");
否则你可以试试这个:
PropertyConfigurator.configure(this.getClass().getClassLoader().getResource("conf/log4j.properties"));
答案 1 :(得分:3)
LogManager
自动类会在用于加载log4j类的 log4j.properties
中查找名为log4j.xml
或classpath
的文件。在版本1.2.6之前,log4j将仅查找类路径中的log4j.properties
文件。从版本1.2.7开始,log4j在类路径中查找log4j.properties
和log4j.xml
。
只需将log4j文件放在默认包中即可。您还应确保该文件位于.class
目录中。
答案 2 :(得分:1)
我为这种东西使用了Rachel java库http://rachel.sourceforge.net/
下载lib并将其添加到类路径中。然后,您可以像这样使用它来加载JAR文件/包中的任何文件,并且在使用JNLP部署的应用程序时也可以使用它。他们有很多很好的教程来阅读加载文件的最佳方法。我通常喜欢将它们作为输入流加载。