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

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

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

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

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

  1. 使用系统属性指定:-Dlog4j.configuration = log4j.properties
  2. 初始化Log4jInit servlet。

请建议哪种方法更好。

在我的应用程序中,我使用${user.home}目录存储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 ); 

另见

  • 有效的日志记录实践可以简化企
  • Log4j最佳实践

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

 set CLASSPATH=myfile.jar;%CLASSPATH%