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


问题内容

我在应用程序中使用Log4j。log4j.properties放置在classpath中的Jar中。该配置文件正在使用中,并且在大多数情况下都可以正常工作。

但是有时,生成的日志记录语句与配置文件不同。

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

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

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

请提出哪种方法更好。


问题答案:

在我的应用程序中,我使用${user.home}dir进行存储,log4j.properties而使用ant进行读取。它将独立于平台。也可以在classpath中通过build传递一个,但是从$
{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 );

另请参阅