加载多个资源log4j的java问题。性质
所以,我正在试用ApacheLog4J库,我设法让所有东西都正常工作。我运行了一次我的程序,它完美地完成了所有的日志记录。然后,我又去运行它,它崩溃了。我试了一次又一次,程序崩溃了
我有一些。属性/目录中的属性文件。我正在使用两个不同的.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
文件初始化)
# 1 楼答案
为什么不在类路径中添加
log4j.properties
并取消所有手动资源加载