springboot+mybatis-plus的logback+Slf4j日志配置及sql打印
第一步加入如下log包
1 2 3 4 5 | // 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文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <?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> |
1 | mapper(sql)日志级别 |
1 2 3 | logging: level: com.example.gradle.mapper: debug |
使用例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @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
1 2 3 4 5 6 7 8 9 10 11 12 | 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
标签:
springboot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?