我们将Log4j 1.2.15与我们的普通Swing应用程序捆绑在一起,并在启动时从文件系统加载我们自己的属性文件:
import org.apache.log4j.*;
...
System.setProperty("log4j.defaultInitOverride", "true");
...
File log4jPropertiesFile = ...
PropertyConfigurator.configure(log4jPropertiesFile.getAbsolutePath());
...
在我们从客户那里得到的日志中,输出看起来不像我们在属性文件中定义的那样,我们确信不会只有极少数人自己编辑文件。
如果用户机器上某处存在另一个配置文件,Log4j是否会以某种方式覆盖我们的设置?我们如何防止使用它?
答案 0 :(得分:4)
有一整段in the docs详细说明了Log4j如何初始化自己:
确切的默认初始化算法定义如下:
诚然,这让人难以理解。基本上,您可以做的最简单的事情是将log4j.properties
放在应用程序的类路径上,然后找到它。其他一切都是......技巧。就个人而言,我有时会明确地调用BasicConfigurator
中的main
类,有时会配置(硬编码)一些可能出现在文件中的内容......无论我的情况如何。您可以以编程方式完全初始化log4j,这会使配置文件的问题变得没有问题。虽然它也会使你的配置完全不那么灵活。