Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
log4j多个配置文件_Log4j - Fatal编程技术网

log4j多个配置文件

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

我有两个项目作为JAR嵌入到web应用程序中。每个项目都有一个log4j.properties文件。当web应用程序被删除时,将使用哪个配置文件,以及如何在jar文件中覆盖log4j.xml中的配置。jar不是web项目。它们更像是服务层代码。在下面的场景中,log4j.properties文件的加载顺序是什么

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记录器,但可以适用于任何包记录器。其优点是在“上”配置中删除记录器。