springboot mybatisplus打印sql,spring boot mybatis 日志打印
最近在使用跳羚过程中用到了mybatis-plus,跳羚版本是2.3.1 .版本,mybatis-plus版本3.2.0。
依赖关系groupIdcom.baomidou/groupId artifactId my batis-plus-boot-starter/artifactId版本3 .2 .0/版本/依赖关系使用中需要打印结构化查询语言日志和参数,网上很多的做法是增加日志输出配置。
我的batis-plus。配置。log-impl=org。阿帕奇。伊巴提斯。伐木。stdout。标准输出实现加上去后日志确实是出来,可以看到想法控制台上将结构化查询语言和参数打印出来了。
SQL会话[组织。阿帕奇。伊巴提斯。会话。默认值。默认SQL会话@ 15b 67b]未注册进行同步,因为同步未激活数据库编程连接【HikariProxyConnection @ 6761653包装甲骨文。JDBC。司机。T 4c连接@ 1ea 226 b]将不由springjsqlparsercountpoptimize SQL=SELECT id,password,address,phone,name,email FROM T _ USER _ TEST3其中name=?==准备: SELECT COUNT(1)FROM T _ USER _ TEST3其中name=?==参数:张三3(String)==列: COUNT(1)==行: 0关闭非事务性SQL会话[组织。阿帕奇。伊巴提斯。会话。默认值。默认SQL会话@ 15b 67b]但是项目打成冲突包运行后,日志文件上并没有把结构化查询语言日志记录下来,查看spring.log文件只看到初始启动日志。
2021-07-22 16:433:26.429信息35468-[主]o . s . b . w .嵌入式。雄猫。网络服务器:在端口: 8080上启动,上下文路径为"/test " 2021-07-22 163:43:26.456 INFO 35468-[35468[本地主机]。初始化spring dispatcher Servlet dispatcher Servlet 2021-07-22 16:43:45.047 INFO 35468-[http-nio-8080-exec-7]操作系统web。Servlet。调度程序Servlet :初始化Servlet“调度程序Servlet”2021-07-22 16:40其实StdOutImpl只是把日志打印到控制台,看下StdOutImpl的源码所在的包,是用System.out.println打印的日志,显然这个是把日志打印到控制台,并不会存到日志文件。
我们知道跳羚默认使用的是回溯日志组
件,mybatis-plus同时提供了slf4j的日志实现,这个正是我们要用的。
修改日志输出方式为slf4j,
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
重启再试,日志依然没打印出来,这次连控制台也没有输出sql日志。
通过刚才的日志,我们看到打印sql的实现类是JsqlParserCountOptimize。
JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3 WHERE name = ?
跟踪JsqlParserCountOptimize的代码发现,打印日志前有一个判断logger.isDebugEnabled(),
StdOutImpl默认是返回true;
而slf4j,由于没有指定debug日志级别导致日志没有输出,
指定mybatisplus包名下的日志级别为debug。
logging.level.com.baomidou.mybatisplus=DEBUG
重启后再试发现日志成功打印出来了,
控制台:
2021-07-22 17:29:52.621 INFO 38796 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path /test2021-07-22 17:29:52.642 INFO 38796 --- [ main] c.dragonsoft.demojar.DemoJarApplication : Started DemoJarApplication in 23.164 seconds (JVM running for 24.643)2021-07-22 17:29:58.715 INFO 38796 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/test] : Initializing Spring DispatcherServlet dispatcherServlet2021-07-22 17:29:58.716 INFO 38796 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet dispatcherServlet2021-07-22 17:29:58.737 INFO 38796 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 21 ms2021-07-22 17:30:44.025 WARN 38796 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1m521ms831µs400ns).2021-07-22 17:30:45.131 DEBUG 38796 --- [nio-8080-exec-1] c.b.m.e.p.p.o.JsqlParserCountOptimize : JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3 WHERE name = ?
日志文件:
2021-07-22 17:29:52.621 INFO 38796 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path /test2021-07-22 17:29:52.642 INFO 38796 --- [main] c.dragonsoft.demojar.DemoJarApplication : Started DemoJarApplication in 23.164 seconds (JVM running for 24.643)2021-07-22 17:29:58.715 INFO 38796 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/test] : Initializing Spring DispatcherServlet dispatcherServlet2021-07-22 17:29:58.716 INFO 38796 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet dispatcherServlet2021-07-22 17:29:58.737 INFO 38796 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 21 ms2021-07-22 17:30:44.025 WARN 38796 --- [HikariPool-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1m521ms831µs400ns).2021-07-22 17:30:45.131 DEBUG 38796 --- [http-nio-8080-exec-1] c.b.m.e.p.p.o.JsqlParserCountOptimize : JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3 WHERE name = ?
但是只是打印了sql,参数呢?通过阅读源码发现参数打印是由logging目录下的这几个类实现的;
具体实现是通过动态代理的方式,
代理的初始化是在org.apache.ibatis.executor.BaseExecutor类进行,可以发现同样有一个debug判断,
查看log实现类,发现项目模块mapper目录没有指定日志级别
修改项目mapper目录日志级别为debug后发现sql日志和参数成功打印。
logging.level.com.dragonsoft.demojar.mapper=DEBUG
控制台:
2021-07-22 17:46:29.255 INFO 38688 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Initializing Servlet dispatcherServlet2021-07-22 17:46:29.268 INFO 38688 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Completed initialization in 13 ms2021-07-22 17:46:36.869 DEBUG 38688 --- [nio-8080-exec-6] c.b.m.e.p.p.o.JsqlParserCountOptimize : JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3 WHERE name = ?2021-07-22 17:46:36.906 DEBUG 38688 --- [nio-8080-exec-6] c.d.d.m.U.pagingBySearchable : ==> Preparing: SELECT COUNT(1) FROM T_USER_TEST3 WHERE name = ? 2021-07-22 17:46:36.998 DEBUG 38688 --- [nio-8080-exec-6] c.d.d.m.U.pagingBySearchable : ==> Parameters: zhangsan3(String)
日志文件:
2021-07-22 17:46:29.254 INFO 38688 --- [http-nio-8080-exec-6] o.a.c.c.C.[Tomcat].[localhost].[/test] : Initializing Spring DispatcherServlet dispatcherServlet2021-07-22 17:46:29.255 INFO 38688 --- [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Initializing Servlet dispatcherServlet2021-07-22 17:46:29.268 INFO 38688 --- [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Completed initialization in 13 ms2021-07-22 17:46:36.869 DEBUG 38688 --- [http-nio-8080-exec-6] c.b.m.e.p.p.o.JsqlParserCountOptimize : JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3 WHERE name = ?2021-07-22 17:46:36.906 DEBUG 38688 --- [http-nio-8080-exec-6] c.d.d.m.U.pagingBySearchable : ==> Preparing: SELECT COUNT(1) FROM T_USER_TEST3 WHERE name = ? 2021-07-22 17:46:36.998 DEBUG 38688 --- [http-nio-8080-exec-6] c.d.d.m.U.pagingBySearchable : ==> Parameters: zhangsan3(String)
总结:总共需要以下三个配置
1:设置mybatisplus包下的日志级别为DEBUG;2:设置项目mapper目录的日志级别为DEBUG;3:设置mybatis-plus的日志输出方式为slf4j。
logging.level.com.baomidou.mybatisplus=DEBUG#项目mapper目录logging.level.com.dragonsoft.demojar.mapper=DEBUGmybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
当然,生产环境下还是需要谨慎考虑一下是否开启sql日志,因为日志记录是会进行频繁的IO,会有一定的性能损耗。
到此这篇关于springboot下mybatis-plus如何打印sql日志和参数到日志文件的文章就介绍到这了,更多相关mybatis-plus 打印sql日志内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。