所以,我正在尝试apache log4j库,我设法让一切正常。我运行了一次程序,它完全完成了所有日志记录。然后,我再次运行它,它崩溃了。我一次又一次地尝试了程序崩溃。
我在属性/目录中有一些.properties文件。我正在使用两个不同的.properties
文件并分别使用getResource
和getResourceAsStream
加载它们:
首先为了配置我的记录器:
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"); )
我认为getResource
和getResourceAsStream
之间存在冲突的原因是因为崩溃实际上发生在我打电话的时候:
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
文件初始化)
答案 0 :(得分:0)
为什么不在您的类路径中使用log4j.properties
并取消所有手动资源加载?