我在网络应用中嵌入了几个项目作为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.
答案 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。