【问题标题】:Same webapp on Tomcat with different log4j config for eachTomcat 上相同的 webapp,每个 webapp 具有不同的 log4j 配置
【发布时间】:2013-07-16 20:15:28
【问题描述】:

我已经狩猎和阅读,我认为没有办法......但以防万一。

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

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

但我真的希望这些中的每一个都记录到一个单独的文件中。事实上,一切都转到 catalina.out。这是一个使用 log4j 和 slf4j 的 Spring 应用程序。我探索过的每条途径都让我无处可去。

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

有什么想法吗?

【问题讨论】:

    标签: spring tomcat log4j


    【解决方案1】:

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

    http://tomcat.apache.org/tomcat-7.0-doc/config/loader.html#VirtualWebappLoader_Implementation

    看起来像这样。

    ${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。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多