欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件

 更新時(shí)間:2022年03月07日 15:14:32   作者:Joker2018  
本文主要介紹了springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在使用springboot過(guò)程中用到了mybatis-plus ,springboot版本是2.3.1.RELEASE,mybatis-plus 版本3.2.0。

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

使用中需要打印sql日志和參數(shù),網(wǎng)上很多的做法是增加日志輸出配置。

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

加上去后日志確實(shí)是出來(lái),可以看到idea控制臺(tái)上將sql和參數(shù)打印出來(lái)了。

SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15b67b] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@6761653 wrapping oracle.jdbc.driver.T4CConnection@1ea226b] will not be managed by Spring
JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3  WHERE name = ?
==>  Preparing: SELECT COUNT(1) FROM T_USER_TEST3 WHERE name = ? 
==> Parameters: zhangsan3(String)
<==    Columns: COUNT(1)
<==        Row: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15b67b]

但是項(xiàng)目打成jar包運(yùn)行后,日志文件上并沒(méi)有把sql日志記錄下來(lái),查看 spring.log文件只看到初始啟動(dòng)日志。

2021-07-22 16:43:26.429  INFO 35468 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '/test'
2021-07-22 16:43:26.456  INFO 35468 --- [main] c.dragonsoft.demojar.DemoJarApplication  : Started DemoJarApplication in 21.168 seconds (JVM running for 22.947)
2021-07-22 16:43:45.047  INFO 35468 --- [http-nio-8080-exec-7] o.a.c.c.C.[Tomcat].[localhost].[/test]   : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-07-22 16:43:45.047  INFO 35468 --- [http-nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-22 16:43:45.062  INFO 35468 --- [http-nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Completed initialization in 14 ms

其實(shí)StdOutImpl只是把日志打印到控制臺(tái),看下StdOutImpl的源碼所在的包,是用System.out.println打印的日志,顯然這個(gè)是把日志打印到控制臺(tái),并不會(huì)存到日志文件。

我們知道springboot默認(rèn)使用的是logback日志組件,mybatis-plus同時(shí)提供了slf4j的日志實(shí)現(xiàn),這個(gè)正是我們要用的。

 修改日志輸出方式為slf4j,

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl

重啟再試,日志依然沒(méi)打印出來(lái),這次連控制臺(tái)也沒(méi)有輸出sql日志。

通過(guò)剛才的日志,我們看到打印sql的實(shí)現(xiàn)類是JsqlParserCountOptimize。

JsqlParserCountOptimize sql=SELECT id,password,address,phone,name,email FROM T_USER_TEST3 WHERE name = ?

跟蹤JsqlParserCountOptimize的代碼發(fā)現(xiàn),打印日志前有一個(gè)判斷l(xiāng)ogger.isDebugEnabled(),

StdOutImpl默認(rèn)是返回true;

而slf4j,由于沒(méi)有指定debug日志級(jí)別導(dǎo)致日志沒(méi)有輸出,

 指定mybatisplus包名下的日志級(jí)別為debug。

logging.level.com.baomidou.mybatisplus=DEBUG

重啟后再試發(fā)現(xiàn)日志成功打印出來(lái)了,

 控制臺(tái):

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 '/test'
2021-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 'dispatcherServlet'
2021-07-22 17:29:58.716  INFO 38796 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-22 17:29:58.737  INFO 38796 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 21 ms
2021-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 '/test'
2021-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 'dispatcherServlet'
2021-07-22 17:29:58.716  INFO 38796 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-22 17:29:58.737  INFO 38796 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 21 ms
2021-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,參數(shù)呢?通過(guò)閱讀源碼發(fā)現(xiàn)參數(shù)打印是由logging目錄下的這幾個(gè)類實(shí)現(xiàn)的;

具體實(shí)現(xiàn)是通過(guò)動(dòng)態(tài)代理的方式,

代理的初始化是在org.apache.ibatis.executor.BaseExecutor類進(jìn)行,可以發(fā)現(xiàn)同樣有一個(gè)debug判斷,

查看log實(shí)現(xiàn)類,發(fā)現(xiàn)項(xiàng)目模塊mapper目錄沒(méi)有指定日志級(jí)別

 修改項(xiàng)目mapper目錄日志級(jí)別為debug后發(fā)現(xiàn)sql日志和參數(shù)成功打印。

logging.level.com.dragonsoft.demojar.mapper=DEBUG

控制臺(tái):

2021-07-22 17:46:29.255  INFO 38688 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-22 17:46:29.268  INFO 38688 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet        : Completed initialization in 13 ms
2021-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 'dispatcherServlet'
2021-07-22 17:46:29.255  INFO 38688 --- [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-22 17:46:29.268  INFO 38688 --- [http-nio-8080-exec-6] o.s.web.servlet.DispatcherServlet        : Completed initialization in 13 ms
2021-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)

總結(jié):總共需要以下三個(gè)配置

1:設(shè)置mybatisplus包下的日志級(jí)別為DEBUG;
2:設(shè)置項(xiàng)目mapper目錄的日志級(jí)別為DEBUG;
3:設(shè)置mybatis-plus的日志輸出方式為slf4j。

logging.level.com.baomidou.mybatisplus=DEBUG
#項(xiàng)目mapper目錄
logging.level.com.dragonsoft.demojar.mapper=DEBUG
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl

當(dāng)然,生產(chǎn)環(huán)境下還是需要謹(jǐn)慎考慮一下是否開啟sql日志,因?yàn)槿罩居涗浭菚?huì)進(jìn)行頻繁的IO,會(huì)有一定的性能損耗。

到此這篇關(guān)于springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件的文章就介紹到這了,更多相關(guān)mybatis-plus 打印sql日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot引入攔截器并放行swagger代碼實(shí)例

    Springboot引入攔截器并放行swagger代碼實(shí)例

    這篇文章主要介紹了Springboot引入攔截器并放行swagger代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java中HashMap 中的一個(gè)坑

    Java中HashMap 中的一個(gè)坑

    這篇文章主要介紹了Java中HashMap 中的一個(gè)坑,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • AJAX省市區(qū)三級(jí)聯(lián)動(dòng)下拉菜單(java版)

    AJAX省市區(qū)三級(jí)聯(lián)動(dòng)下拉菜單(java版)

    這篇文章主要介紹了AJAX省市區(qū)三級(jí)聯(lián)動(dòng)下拉菜單(java版)的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 詳解Spring Boot中初始化資源的幾種方式

    詳解Spring Boot中初始化資源的幾種方式

    這篇文章主要介紹了詳解Spring Boot中初始化資源的幾種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • JAVA對(duì)稱加密算法PBE定義與用法實(shí)例分析

    JAVA對(duì)稱加密算法PBE定義與用法實(shí)例分析

    這篇文章主要介紹了JAVA對(duì)稱加密算法PBE定義與用法,結(jié)合實(shí)例形式分析了JAVA對(duì)稱加密算法PBE的概念、原理、定義及使用方法,需要的朋友可以參考下
    2019-09-09
  • 淺析JAVA中toString方法的作用

    淺析JAVA中toString方法的作用

    以下是對(duì)在JAVA中toString方法的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • ArrayList集合初始化及擴(kuò)容方式

    ArrayList集合初始化及擴(kuò)容方式

    這篇文章主要介紹了關(guān)于ArrayList集合初始化及擴(kuò)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MyBatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)類型和Java類型的轉(zhuǎn)換

    MyBatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)類型和Java類型的轉(zhuǎn)換

    MyBatis 在處理數(shù)據(jù)庫(kù)查詢結(jié)果或傳遞參數(shù)時(shí),需要將數(shù)據(jù)庫(kù)類型與 Java 類型之間進(jìn)行轉(zhuǎn)換,本文就給大家介紹MyBatis如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)類型和 Java 類型的轉(zhuǎn)換的,需要的朋友可以參考下
    2024-09-09
  • Prometheus監(jiān)控Springboot程序的實(shí)現(xiàn)方法

    Prometheus監(jiān)控Springboot程序的實(shí)現(xiàn)方法

    這篇文章主要介紹了Prometheus監(jiān)控Springboot程序的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 解決springboot環(huán)境切換失效的問(wèn)題

    解決springboot環(huán)境切換失效的問(wèn)題

    這篇文章主要介紹了解決springboot環(huán)境切換失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論