在同一tomcat下部署多个应用logback日志输出的处理

logback提供的一种日志分割的方法,可以完美解决在同一tomcat下部署多个应用日志输出的问题,即实现每个应用对应一个日志。

这种方法应对的是同一tomcat下多个应用共享lib.

首先:在tomcat的bin目录下创建setenv.bat(windows下)/setenv.sh(linux下)。

setenv.bat

set JAVA_OPTS=%JAVA_OPTS% -Dlogback.ContextSelector=JNDI

setenv.sh

JAVA_OPTS="$JAVA_OPTS -Dlogback.ContextSelector=JNDI"

将共享的日志jar(logback-classic-1.1.7.jar, logback-core-1.1.7.jar,slf4j-api-1.7.5.jar )放到tomcat/lib 或 tomcat/config/config.properties 中指定的路径 share.loader

配置应用的tomcat

假设应用名称为 kenobi

在web.xml中添加

 
    JNDI logging context for this app
    logback/context-name
    java.lang.String
    kenobi
  

  
    URL for configuring logback context
    logback/configuration-resource
    java.lang.String
    logback-kenobi.xml
  

classes目录下,创建 logback-kenobi.xml




    

  
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line cn=%contextName- %msg%n
        
    

  
    
      unknown
    
    
      
        d:/logs/${contextName}.log
        true
        
          %d{HH:mm:ss.SSS} %-50(%level %logger{35}) cn=%contextName - %msg%n
         
      
     
    

  
      
    
  


启动tomcat访问应用,你会发现在d:/logs下创建了kenobi.log

JNI的处理会增加系统开销,因为每次调用LoggerContext都会调用JNI,为了处理这种情况可以在web.xml中增加如下过滤器来应对


  LoggerContextFilter
  ch.qos.logback.classic.selector.servlet.LoggerContextFilter


  LoggerContextFilter
  /*


至此程序结束。

本文参考 http://logback.qos.ch/manual/contextSelector.html

http://logback.qos.ch/manual/loggingSeparation.html

项目工程实例可以从这下载 https://github.com/ceki/logback-starwars

0%