2011-01-28 60 views
5

我在我的应用程序中使用Log4j。 log4j.properties放置在classpath中的Jar中。这个配置文件正在使用,大多数时候都能正常工作。配置Log4j属性路径的最佳实践

但有时候,生成的日志语句不是按照配置文件。

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

在的情况下,上述理由是真实的,那么我认为,我们需要通过下列方式之一明确指定配置文件:

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

请建议哪一个可能是更好的方法。

回答

6

在我的应用程序中,我使用${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); 

请参见

+0

谢谢!这将有所帮助。你能否也请确认我的理解是否正确,获得“不需要”的日志声明的原因? – 2011-01-28 06:53:20

2

当垫子搜索项目在classpath文件的第一实例清名称被使用。因此,将您的.jar添加到前面。

set CLASSPATH=myfile.jar;%CLASSPATH%