如何为Tomcat服务器上的多个app配置公共的logback.xml

当你司在tomcat服务器上部署了多个app,又想为这多个app采用统一的log配置方案,通用的solution一般是(这里以logback为例):

  1. 配置一个公共的log property或xml文件,比方说采用了logback, 我们会有一个myLogback.xml
  2. 将该配置文件放于tomcat的一个common目录,比如your_tomcat/conf, 并将该目录加入到tomcat的classPath, 方法有很多,最简单你的可以直接修改catalina.bat或setclasspath.bat,增加该目录到CLASSPATH变量中
  3. 在每个app的web.xml中指定logback.configuration的resource name

    <env-entry>

        <description>JNDI logging context for this content pack</description>

        <env-entry-name>logback/context-name</env-entry-name>

        <env-entry-type>java.lang.String</env-entry-type>

        <env-entry-value>app</env-entry-value>

    </env-entry>

    <env-entry>

        <description>URL for configuring logback context</description>

        <env-entry-name>logback/configuration-resource</env-entry-name>

        <env-entry-type>java.lang.String</env-entry-type>

        <env-entry-value>myLogback.xml</env-entry-value>

    </env-entry>

4, 在tomcat的启动时
set “JAVA_OPTS= %JAVA_OPTS% -Dlogback.ContextSelector=JNDI”

这样,logback在启动时,就会通过contextSelector在你app的classLoader目录下寻找web.xml定义的logback/configuration-resource,在这里例子中,contextSelector会在启动的过程中在classLoader的目录中寻找myLogback.xml作为logContext的配置文件,由于classLoader的机制是继承于容器的,所以,索然myLogback.xml没有放在war包当中,但我们仍然可以在容器的classpath目录中找到它

你可能感兴趣的:(tomcat,logback,web.xml)