配置Log4j属性路径的最佳实践
问题内容:
我在应用程序中使用Log4j。log4j.properties
放置在classpath中的Jar中。该配置文件正在使用中,并且在大多数情况下都可以正常工作。
但是有时,生成的日志记录语句与配置文件不同。
我的理解是,这是因为属性文件是从类路径中获取的。不管第一个属性文件是什么,都由log4j获取和使用。因此,有时我们得到的日志记录语句与属性文件中配置的语句不同。
如果上述原因属实,那么我认为,我们需要通过以下方式之一专门指定配置文件:
- 使用系统属性指定:-Dlog4j.configuration = log4j.properties
- 初始化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 );
另请参阅