使用的jar包: janino.jar logback-access-1.0.11.jar logback-classic-1.0.11.jar logback-core-1.0.11.jar slf4j-api-1.7.5.jar
logback.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="F:/loback/logs/" />
<property name="LOG_PATTERNControl" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{80} [%file:%line] - %n %msg%n" />
<property name="LOG_PATTERN" value="%-1relative [%t] %-5level %logger{0} [%file:%line] - %msg%n " />
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<!-- 取出springframework日志的输出 -->
<evaluator>
<expression>logger.contains("springframework")</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<!--
%-4r - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} -%msg%n
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %n %-4r % msg%n %d
[%p] %L%n%m%n%n
-->
<encoder charset="UTF-8">
<pattern>${LOG_PATTERNControl}</pattern>
</encoder>
</appender>
<!-- 输出logback -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<!--
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level> </filter>
-->
<!-- 可让每天产生一个日志文件,最多 10 天,自动回滚 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}logback.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>2</maxHistory>
</rollingPolicy>
<!-- 生成文件超过2KB,打包成zip包
<file>${LOG_HOME}zipLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}zipLogback/log.%i.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>2KB</maxFileSize> 默认为10MB
</triggeringPolicy>
-->
<!--
%-1relative [%thread] %-5level %logger{0} - %msg%n
-->
<encoder>
<pattern>${LOG_PATTERNControl}</pattern>
</encoder>
</appender>
<!-- 配置个人输出debug日志 -->
<appender name="eisc_debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}logback_debug.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERNControl}</pattern>
</encoder>
</appender>
<!-- 配置个人输出error日志 -->
<appender name="test_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}logback_error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERNControl}</pattern>
</encoder>
</appender>
<!-- 配置输出级别和匹配作用域 -->
<logger name="com.test.log" level="DEBUG" additivity="true">
<appender-ref ref="test_debug" />
</logger>
<!-- 配置输出级别和匹配作用域 -->
<logger name="com.test.log" level="ERROR" additivity="true">
<appender-ref ref="test_error" />
</logger>
<root level="DEBUG" additivity="true">
<appender-ref ref="stdout" />
<appender-ref ref="RollingFile" />
</root>
</configuration>
web.xml中初始化 :
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>WEB-INF/logback.xml</param-value>
</context-param>
<listener>
<listener-class>com.test.log.utils.InitLogbackUtil</listener-class>
</listener>
InitLogbackUtil源代码:
package com.test.log.utils;
import java.io.File;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
public class InitLogbackUtil implements ServletContextListener {
private static final Logger logger = LoggerFactory.getLogger(LogbackConfigListener.class);
private static final String CONFIG_LOCATION = "logbackConfigLocation";
@Override
public void contextInitialized(ServletContextEvent event) {
//从web.xml中加载指定文件名的日志配置文件
String logbackConfigLocation = event.getServletContext().getInitParameter(CONFIG_LOCATION);
String fn = event.getServletContext().getRealPath(logbackConfigLocation);
System.out.println(" prepared file destory ["+fn+"]");
try {
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
loggerContext.reset();
JoranConfigurator joranConfigurator = new JoranConfigurator();
joranConfigurator.setContext(loggerContext);
joranConfigurator.doConfigure(fn);
logger.debug("loaded slf4j configure file from {}", fn);
}
catch (JoranException e) {
logger.error("can loading slf4j configure file from " + fn, e);
}
}
@Override
public void contextDestroyed(ServletContextEvent event) {
}
}