Java Log4j:从它自身初始化的位置
我们将Log4j 1.2.15与普通Swing应用程序捆绑在一起,并在启动时从文件系统加载我们自己的属性文件:Java Log4j:从它自身初始化的位置,java,log4j,Java,Log4j,我们将Log4j 1.2.15与普通Swing应用程序捆绑在一起,并在启动时从文件系统加载我们自己的属性文件: import org.apache.log4j.*; ... System.setProperty("log4j.defaultInitOverride", "true"); ... File log4jPropertiesFile = ... PropertyConfigurator.configure(log4jPropertiesFile.getAbsolutePath());
import org.apache.log4j.*;
...
System.setProperty("log4j.defaultInitOverride", "true");
...
File log4jPropertiesFile = ...
PropertyConfigurator.configure(log4jPropertiesFile.getAbsolutePath());
...
在我们从客户那里获得的日志中,输出看起来不像我们在属性文件中定义的那样,我们确信只有极少数人自己编辑了该文件
如果用户机器上存在另一个可用的配置文件,Log4j是否会以某种方式覆盖我们的设置?我们如何防止使用它?有一整段详细介绍了Log4j如何初始化自己:
精确的默认初始化算法定义如下:
log4j.properties
放在你的应用程序的类路径上,它就会被找到。其他一切都是。。。手腕就我个人而言,我有时在我的main
中显式调用BasicConfigurator
类,有时配置(硬编码)文件中可能出现的某些内容。。。不管我的处境如何。您可以完全以编程方式初始化log4j,这会使配置文件的问题变得毫无意义。尽管这也会使您的配置变得不那么灵活。有一整段详细介绍了Log4j如何初始化自己:
精确的默认初始化算法定义如下:
不可否认,这令人费解。基本上,你能做的最简单的事情就是把
log4j.properties
放在你的应用程序的类路径上,它就会被找到。其他一切都是。。。手腕就我个人而言,我有时在我的main
中显式调用BasicConfigurator
类,有时配置(硬编码)文件中可能出现的某些内容。。。不管我的处境如何。您可以完全以编程方式初始化log4j,这会使配置文件的问题变得毫无意义。尽管这也会使您的配置完全不那么灵活。您是舒尔,有一个PropertyConfigurator.configure(文件)方法吗?log4j1.2.16api中没有任何内容…@PeterMmm:我只是在注意到你的评论之前,偶然发现了这个差异。我查看的文档是针对1.2.16的,因此它离OP不远,不应该看到如此剧烈的API更改。这里有些不对劲;我向OP寻求解释。你们都是对的,我上面的代码示例是错误的。我们使用的是绝对文件路径,而不是文件实例。我已经纠正了。您是舒尔。有一个PropertyConfiguration。配置(文件)方法吗?log4j1.2.16api中没有任何内容…@PeterMmm:我只是在注意到你的评论之前,偶然发现了这个差异。我看的是1.2.16版的文件,所以离