1、在pom文件中添加log4j的maven依赖
<!-- 用来设置版本号 -->
<properties>
<slf4j.version>1.7.25</slf4j.version>
<logback.version>1.2.3</logback.version>
</properties>
<!-- 用到的jar包 -->
<dependencies>
<!-- logback start -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<!-- logback end -->
</dependencies>
2、在当前项目的src/main/resources文件夹下,新增文件logback.xml,配置样例如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--文件资源的引用-->
<property resource="app.properties"/>
<!-- 默认输出文件 -->
<appender name="DEFAULT-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/default/common-default.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!-- 默认错误文件 -->
<appender name="ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/error/common-error.log.%d{yyyyMMdd}</fileNamePattern>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- 性能日志文件 -->
<appender name="PERF-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/perf/common-perf.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!-- 默认dao日志文件 -->
<appender name="DAO-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/dao/common-dao.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!-- service日志文件 -->
<appender name="SERVICE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/service/common-service.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!-- 业务日志文件 -->
<appender name="BUSINESS-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/business/common-business.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!-- WEB日志文件 -->
<appender name="WEB-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/web/common-web.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!-- 报警日志 -->
<appender name="ALARM-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/alarm/common-alarm.log.%d{yyyyMMdd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d [%t] %-5p %c{2} [%X{traceRootId}] - [%m]%n</pattern>
</encoder>
</appender>
<!--默认追踪日志-一般model或工具类日志用此 -->
<appender name="TRACE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.home}/trace/tracing.log.%d{yyyy-MM-dd-HH}.gz</fileNamePattern>
<maxHistory>72</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d - [%m]%n</pattern>
</encoder>
</appender>
<!-- ===================================================================== -->
<!-- Loggers -->
<!-- ===================================================================== -->
<logger name="com.myself.ssmTest.controller" additivity="false">
<level value="${log.root.level}"/>
<appender-ref ref="WEB-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<logger name="com.myself.ssmTest.service" additivity="false">
<level value="${log.root.level}"/>
<appender-ref ref="SERVICE-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<logger name="com.myself.ssmTest.dao" additivity="false">
<level value="${log.root.level}"/>
<appender-ref ref="DAO-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<logger name="com.myself.ssmTest.model" additivity="false">
<level value="INFO"/>
<appender-ref ref="TRACE-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<logger name="businessLogger" additivity="false">
<level value="${log.root.level}"/>
<appender-ref ref="BUSINESS-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<logger name="com.tuan.core.common.aop.pref.PerformanceMonitorInterceptor" additivity="false">
<level value="INFO"/>
<appender-ref ref="PERF-APPENDER"/>
</logger>
<logger name="java.sql" additivity="false">
<level value="${log.root.level}"/>
<appender-ref ref="DAO-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<logger name="alarmLogger" additivity="false">
<level value="${log.root.level}"/>
<appender-ref ref="ALARM-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<!-- 屏蔽logger-start -->
<logger name="org.springframework" level="${log.root.level}"/>
<logger name="org.apache" level="WARN"/>
<logger name="org.mybatis.spring" level="${log.root.level}"/>
<!-- 屏蔽jdk日志 -->
<logger name="java" level="WARN"/>
<logger name="com.mchange" additivity="false">
<level value="WARN"/>
<appender-ref ref="DAO-APPENDER"/>
</logger>
<!-- 屏蔽logger-end-->
<root level="${log.root.level}">
<appender-ref ref="DEFAULT-APPENDER"></appender-ref>
<appender-ref ref="ERROR-APPENDER"></appender-ref>
</root>
</configuration>
3、如果是web项目,请在src\main\webapp\WEB-INF\web.xml文件的最上方配置logback监听器,如下
<!--logback-start -->
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>/WEB-INF/classes/logback.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
<!--logback-end -->
4、最后,附上一段日志打印样例
package com.test.justTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogbackTest {
/**
* 日志:因logback.xml未配置此包下的日志,<br/>
* 所以会输入到默认日志文件:${log.home}/default/common-default.log.%d{yyyyMMdd}
*/
private static final Logger commonLogger = LoggerFactory.getLogger(LogbackTest.class);
/**
* 业务日志:打印至${log.home}/business/common-business.log.%d{yyyyMMdd}<br/>
* 查看app.properties得知${log.home}=/data/application/logs/myProject
*/
public static final Logger businessLogger = LoggerFactory.getLogger("businessLogger");
/**
* 告警日志:打印至${log.home}/alarm/common-alarm.log.%d{yyyyMMdd}<br/>
* 查看app.properties得知${log.home}=/data/application/logs/myProject
*/
public static final Logger alarmLogger = LoggerFactory.getLogger("alarmLogger");
public static void main(String[] args) {
System.out.printf("------LogbackTest-打印日志开始------");
printTestLog(commonLogger);
printTestLog(businessLogger);
printTestLog(alarmLogger);
System.out.printf("------LogbackTest-打印日志结束------");
/**
* 执行完上述代码请至相应文件夹下查看相应文件中的内容是否有打印
*/
}
/**
* 打印日志
* @param logger 日志打印者
*/
public static void printTestLog(Logger logger){
//debug级别的日志
logger.debug("this is a debug log ,logger={}",logger.getName());
//info级别的日志
logger.info("this is a info log,logger={}",logger.getName());
//warn级别的日志
logger.warn("this is a warn log,logger={}",logger.getName());
//error级别的日志
logger.error("this is a error log,logger={}",logger.getName(),new RuntimeException());
}
}