springboot+mybatis-plus的logback+Slf4j日志配置及sql打印
第一步加入如下log包
// https://mvnrepository.com/artifact/org.projectlombok/lombok compileOnly 'org.projectlombok:lombok:1.18.6' annotationProcessor 'org.projectlombok:lombok:1.18.6' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-logging compile group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '2.3.1.RELEASE'
在resources下新建logback-spring.xml放在resources下springboot可自动装配。
如果想自定义可在mybatisplus配置中设置如下
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>logback</contextName> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="logs" /> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--日志级别过滤INFO以下--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- <level>info</level>--> <!-- 过滤的级别 --> <level>debug</level> </filter> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/promotion.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="debug"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> <!-- mapper(sql)日志级别,放在yml控制--> <!-- <logger name="com.example.gradle.mapper" level="debug" />--> </configuration>
mapper(sql)日志级别
logging: level: com.example.gradle.mapper: debug
使用例子
@RestController @RequestMapping("/pay-record") @Slf4j public class PayRecordController { @Autowired private IPayRecordService service; /** * 查询列表 * @return */ @GetMapping("/list") public AjaxResult list(PayRecord payRecord) { log.info("日志测试"); LambdaQueryWrapper<PayRecord> wrapper = new QueryWrapper<PayRecord>().lambda(); if(null != payRecord.getPayId()){ wrapper.eq(PayRecord::getPayId,payRecord.getPayId()); } return AjaxResult.success(service.list(wrapper)); } }
打印出的log
2020-09-12 18:45:52.093 INFO 11740 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-09-12 18:45:52.256 INFO 11740 --- [ main] o.a.coyote.http11.Http11NioProtocol : Starting ProtocolHandler ["http-nio-8080"] 2020-09-12 18:45:52.353 INFO 11740 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2020-09-12 18:45:52.365 INFO 11740 --- [ main] com.example.DemoApplication : Started DemoApplication in 2.236 seconds (JVM running for 3.306) 2020-09-12 18:45:56.119 INFO 11740 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2020-09-12 18:45:56.123 INFO 11740 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2020-09-12 18:45:56.131 INFO 11740 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms 2020-09-12 18:45:56.171 INFO 11740 --- [nio-8080-exec-1] c.e.g.controller.PayRecordController : 日志测试 2020-09-12 18:45:56.305 INFO 11740 --- [nio-8080-exec-1] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited 2020-09-12 18:45:57.588 DEBUG 11740 --- [nio-8080-exec-1] c.e.g.mapper.PayRecordMapper.selectList : ==> Preparing: SELECT pay_id,receipt_by,dept_name,pay_time,remark,del_flag,paid_money,receipt_time,pay_money,pay_idnumber,update_by,pay_oddnumbers,ancestors,pay_name,project_content,nick_name,traceno,dept_id,receipt_remark,update_time,transdate,transtime,create_by,pay_phone,create_time,receipt_no,qr_code_url,pay_statusDes,pay_status,receipt_status FROM pay_record 2020-09-12 18:45:57.620 DEBUG 11740 --- [nio-8080-exec-1] c.e.g.mapper.PayRecordMapper.selectList : ==> Parameters: 2020-09-12 18:45:57.714 DEBUG 11740 --- [nio-8080-exec-1] c.e.g.mapper.PayRecordMapper.selectList : <== Total: 1
完美解决sql的打印
生产环境只需吧mapper日志级别改为info即可。
nnjk