log4j多个配置文件
我有两个项目作为JAR嵌入到web应用程序中。每个项目都有一个log4j.properties文件。当web应用程序被删除时,将使用哪个配置文件,以及如何在jar文件中覆盖log4j.xml中的配置。jar不是web项目。它们更像是服务层代码。在下面的场景中,log4j.properties文件的加载顺序是什么log4j多个配置文件,log4j,Log4j,我有两个项目作为JAR嵌入到web应用程序中。每个项目都有一个log4j.properties文件。当web应用程序被删除时,将使用哪个配置文件,以及如何在jar文件中覆盖log4j.xml中的配置。jar不是web项目。它们更像是服务层代码。在下面的场景中,log4j.properties文件的加载顺序是什么 Web-project classes log4j.properties ProjectB.jar com log4j.propertie
Web-project
classes
log4j.properties
ProjectB.jar
com
log4j.properties
ProjectC.jar
com
log4j.properties and so on.
如果您的JAR是独立的web应用程序,那么每个web应用程序都应该使用它首先在类路径(web-INF/classes)上找到的JAR 您可以将-Dlog4j.configuration=path_to_文件设置传递给tomcat启动程序,以确保它使用您想要使用的文件。 然而,据我所知,tomcat将在部署的每个Web应用程序中使用这个选项 这里的问题是如何部署应用程序。在一个tomcat中的所有web应用程序中,您可能希望每个web应用程序使用不同的log4.properties(或log4j.xml),或者在您为tomcat指定一个的情况下,它应该使用您指定的一个 据我所知,它归结为:要么是在类路径上找到的第一个(记住:每个web应用都有自己的类路径),要么是通过-D设置指定的 刚刚找到这个参考资料,我认为它很好地总结了登录tomcat和部署在tomcat中的webapps的主要概念:
如果您需要对log4j日志进行更多的控制,可以使用java编写log4j配置。但是,这意味着您必须修改源代码并向其中添加代码,这与基础设施相关,并将部署细节与应用程序相关(不太好)。如果在ProjectA、ProjectB和WebProject的公共包中将additivity设置为false,您的日志将不会重复 log4j.可加性。[记录的包]=false 例如: log4j.properies->项目A、项目B log4j.additivity.org.spring.framework=false
所有org.spring.framework日志将来自WebProject,忽略ProjectA和ProjectB。只有一个web应用程序,但包含其他JAR,这些JAR不是web应用程序,但仍具有log4j属性文件OK,明白。对于您的场景来说,这是一个问题吗?您认为有必要覆盖jar中包含的log4j.properties吗?您能否影响应用程序的开发和打包方式。我不认为ProjectA.jar或ProjectB.jar的log4j.properties会被选中。我不想将ProjectA.jar中Log4j.properties的内容复制到主Log4j.properties中,而是想知道是否有办法在不复制的情况下加载所有3个属性文件。我想我的答案说明了log4j的实际行为,这都是关于类路径的。在您的情况下,我认为最好的解决方案是实际提供一个公共配置,甚至(如果可能的话)删除jar中的配置。或者,让jar以编程方式加载各自的配置文件(我认为不太好)。这是否适用于单独的配置文件,这就是问题所在?在我的示例中,它仅适用于spring jar记录器,但可以适用于任何包记录器。其优点是在“上”配置中删除记录器。