Spring Tomcat上相同的webapp,每个webapp的log4j配置不同

Spring Tomcat上相同的webapp,每个webapp的log4j配置不同,spring,tomcat,log4j,Spring,Tomcat,Log4j,我一直在寻找和阅读,我想没有办法……只是以防万一 我需要将同一个webapp部署到Tomcat多次,每次都使用不同的配置来指示要使用哪个数据库。我已经知道了如何在不修改war文件内容的情况下做到这一点 简言之,我将WebApp.jar复制到WebAppDB1.jar、WebAppDB2.jar,并将它们部署到webapps文件夹中,并在tomcat/conf/Catalina/localhost中为每个文件夹使用自定义上下文配置。所以我很好 但我真的很想让它们中的每一个都记录到一个单独的文件中。

我一直在寻找和阅读,我想没有办法……只是以防万一

我需要将同一个webapp部署到Tomcat多次,每次都使用不同的配置来指示要使用哪个数据库。我已经知道了如何在不修改war文件内容的情况下做到这一点

简言之,我将WebApp.jar复制到WebAppDB1.jar、WebAppDB2.jar,并将它们部署到webapps文件夹中,并在tomcat/conf/Catalina/localhost中为每个文件夹使用自定义上下文配置。所以我很好

但我真的很想让它们中的每一个都记录到一个单独的文件中。事实上,一切都归卡塔琳娜所有。这是一款使用log4j和slf4j的Spring应用程序。我探索过的每一条路都一无所获

现在,我回到更新实际war文件,进入WEB-INF/classes并更新log4j.xml,但这使它成为一个手动过程


有什么想法吗?

您可以将log4j.xml文件放在Web应用程序外部的某个位置,并使用Tomcat的VirtualWebappLoader为每个Web应用程序加载不同的log4.xml

看起来像这样

${CATALINA_BASE}/conf/CATALINA/localhost/WebAppDB1.xml:

<Context docBase="..." >
  <Loader className="org.apache.catalina.loader.VirtualWebappLoader" virtualClasspath="/somewhere/WebAppDB1" />
</Context>

${CATALINA_BASE}/conf/CATALINA/localhost/WebAppDB2.xml:

<Context docBase="..." >
  <Loader className="org.apache.catalina.loader.VirtualWebappLoader" virtualClasspath="/somewhere/WebAppDB2" />
</Context>

然后将log4j.xml文件放入/somewhere/WebAppDB1和/somewhere/WebAppDB2中

希望这有帮助