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