加载多个资源的问题 - log4j.properties

时间:2012-02-07 20:32:40

标签: java resources log4j

所以,我正在尝试apache log4j库,我设法让一切正常。我运行了一次程序,它完全完成了所有日志记录。然后,我再次运行它,它崩溃了。我一次又一次地尝试了程序崩溃。

我在属性/目录中有一些.properties文件。我正在使用两个不同的.properties文件并分别使用getResourcegetResourceAsStream加载它们:

首先为了配置我的记录器:

PropertyConfigurator.configure(MyClass.class.getResource("properties/MyClassconfig.properties"));

然后为了加载程序中使用的所有常量:

properties.load(MyClass.class.getResourceAsStream("properties/constants.properties"));

正如我之前所说的那样,在第一次运行时,这非常有效。从第二轮开始,我收到了这个错误:

log4j:ERROR Could not read configuration file from URL [null].
java.lang.NullPointerException
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:522)
    at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:415)
    at com.package.package2.common.main.MyClass.main(MyClass.java:69)
log4j:ERROR Ignoring configuration file [null].

所以,行:

MyClass.class.getResource("properties/MyClassconfig.properties")

不再返回有效的URL,而是返回null。我认为这是因为在第一次运行后某些InputStream仍然打开(就像输入流打开一样:

MyClass.class.getResource("properties/MyClassconfig.properties"); )

我认为getResourcegetResourceAsStream之间存在冲突的原因是因为崩溃实际上发生在我打电话的时候:

properties.load(MyClass.class.getResourceAsStream("properties/constants.properties"));

我明白了:

Properties$LineReader.readLine() line: not available [local variables unavailable]  
Properties.load0(Properties$LineReader) line: not available 
Properties.load(InputStream) line: not available    

即使记录器本身与Properties.load()及其InputStream之间没有链接(除了它们都是用.properties文件初始化)

1 个答案:

答案 0 :(得分:0)

为什么不在您的类路径中使用log4j.properties并取消所有手动资源加载?