配置Log4j属性路径的最佳实践

时间:2011-01-28 06:13:39

标签: java logging configuration java-ee log4j

我在我的应用程序中使用Log4j。 log4j.properties放在类路径中的Jar中。正在使用此配置文件,并且大多数时候都可以正常工作。

但有时,生成的日志记录语句不符合配置文件。

我的理解是,这是因为属性文件是从类路径中获取的。无论第一个属性文件是什么,都是由log4j提取和使用的。因此,有时我们会使日志语句与属性文件中配置的日志语句不同。

如果上述原因属实,那么我认为,我们需要通过以下方式之一具体指定配置文件:

  1. 使用系统属性指定: -Dlog4j.configuration = log4j.properties
  2. 初始化Log4jInit servlet。
  3. 请建议哪种方式更好。

2 个答案:

答案 0 :(得分:6)

在我的应用程序中,我使用${user.home} dir存储log4j.properties并使用ant我们正在阅读它。它将与平台无关。你也可以在classpath中传递一个,但是从$ {user.home}读取更好的方法,你或任何非技术人员都可以轻松访问它。

你也可以使用

  

动态日志文件位置

     

许多人抱怨Log4j强迫您对保存日志的位置进行硬编码。实际上,可以动态选择日志文件位置,特别是如果您使用上面的$ {log.dir}属性替换技术。方法如下:

String dynamicLog = // log directory somehow chosen...
Properties p = new Properties( Config.ETC + "/log4j.properties" );
p.put( "log.dir", dynamicLog ); // overwrite "log.dir"
PropertyConfigurator.configure( p );

另见

答案 1 :(得分:2)

在类路径中搜索项目时,将使用具有匹配名称的第一个文件实例。所以将.jar添加到前面。

set CLASSPATH=myfile.jar;%CLASSPATH%