log4j多个配置文件

时间:2011-11-07 21:37:09

标签: log4j

我在网络应用中嵌入了几个项目作为jar。每个项目都有一个log4j.properties文件。在部署Web应用程序时,使用了哪个配置文件以及如何在jar文件中覆盖log4j.xml中的配置。这些罐子不是网络项目。它们更像是服务层代码。在以下场景

中加载log4j.properties文件的顺序是什么
Web-project
   classes
      log4j.properties
   ProjectB.jar
      com
      log4j.properties
   ProjectC.jar
      com
      log4j.properties and so on. 

2 个答案:

答案 0 :(得分:5)

如果您的jar是单独的Web应用程序,则每个Web应用程序应使用它首先在类路径上找到的那个(WEB-INF / classes)。

您可以将-Dlog4j.configuration = path_to_file设置传递给例如tomcat启动以确保它使用您打算使用的那个。 但是,这将使我的理解和知识成为tomcat将用于部署的每个webapp的一个。

此处的问题是您如何部署应用。在一个tomcat中的所有Web应用程序,在这种情况下,您可能希望每个Web应用程序使用不同的log4.properties(或log4j.xml),或者在您为tomcat指定一个Web应用程序的情况下,它应该使用您指定的那个。

据我所知,它归结为:在classpath中找到的第一个(记住:每个web-app都有自己的类路径)或者你通过-D设置指定的那个。

刚刚找到这个参考资料,我认为很好地总结了在tomcat中部署tomcat和webapps的主要概念:http://wiki.apache.org/tomcat/FAQ/Logging

如果您需要更多地控制log4j日志记录,可以使用java编写log4j配置。但是,这意味着您必须修改源代码并在其中添加代码,这与代码相关,并将部署详细信息与应用程序相关联(不太好)。

答案 1 :(得分:-1)

如果在ProjectA,ProjectB和WebProject的常用包中将additive设置为false,则您的日志不会重复。

log4j.additivity。[记录包] =假

例如:

log4j.properies - >项目A,项目B

log4j.additivity.org.spring.framework = false

所有org.spring.framework日志都来自WebProject,忽略ProjectA和ProjectB。