首先创建logback与slf4j的jar包:
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
然后配置logback.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>web</contextName>
<property name="LOG_CHARSET" value="UTF-8"/>
<property name="LOG_PATH" value="/data/html/logs/web"/>
<property name="LOG_LEVEL" value="INFO"/>
<!-- 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</pattern>
</layout>
</appender>
<!-- common -->
<appender name="common" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/web-common.log</File>
<Encoding>${LOG_CHARSET}</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/web-common-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- keep 30 days worth of history-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- rollover daily or whenever the file size reaches 200MB -->
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</Pattern>
</layout>
</appender>
<!-- dal -->
<appender name="dal" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/web-dal.log</File>
<Encoding>${LOG_CHARSET}</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/web-dal-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- keep 30 days worth of history-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- rollover daily or whenever the file size reaches 200MB -->
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</Pattern>
</layout>
</appender>
<!-- biz -->
<appender name="biz" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/web-biz.log</File>
<Encoding>${LOG_CHARSET}</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/web-biz-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- keep 30 days worth of history-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- rollover daily or whenever the file size reaches 200MB -->
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</Pattern>
</layout>
</appender>
<!-- access -->
<appender name="apiAccessAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/web-access.log</File>
<Encoding>${LOG_CHARSET}</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/web-access-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- keep 30 days worth of history-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- rollover daily or whenever the file size reaches 200MB -->
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</Pattern>
</layout>
</appender>
<!-- error -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/web-error.log</File>
<Encoding>${LOG_CHARSET}</Encoding>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/web-error-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- keep 30 days worth of history-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- rollover daily or whenever the file size reaches 200MB -->
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</Pattern>
</layout>
</appender>
<!-- biz -->
<appender name="interceptor" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}/web-interceptor.log</File>
<Encoding>${LOG_CHARSET}</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/web-interceptor-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- keep 30 days worth of history-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- rollover daily or whenever the file size reaches 200MB -->
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %msg%n</Pattern>
</layout>
</appender>
<!-- commom package -->
<logger name="com.qccr.web.common" additivity="false">
<level value="${LOG_LEVEL}"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="common"/>
<appender-ref ref="error"/>
</logger>
<!-- dal package -->
<logger name="com.qccr.web.dal" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="dal"/>
<appender-ref ref="error"/>
</logger>
<!-- api access logger -->
<logger name="apiAccessLogger" additivity="false">
<level value="${LOG_LEVEL}"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="apiAccessAppender"/>
<appender-ref ref="error"/>
</logger>
<!-- biz package -->
<logger name="com.qccr.web.biz" additivity="false">
<level value="${LOG_LEVEL}"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="biz"/>
<appender-ref ref="error"/>
</logger>
<logger name="com.qccr.web.facade" additivity="false">
<level value="${LOG_LEVEL}"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="biz"/>
<appender-ref ref="error"/>
</logger>
<!-- interceptor package -->
<logger name="com.qccr.web.web.interceptor" additivity="false">
<level value="${LOG_LEVEL}"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="interceptor"/>
<appender-ref ref="error"/>
</logger>
<root level="${LOG_LEVEL}">
<appender-ref ref="STDOUT"/>
<appender-ref ref="common"/>
</root>
</configuration>