最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

LogBack+MybatisPlus實(shí)現(xiàn)打印sql日志

 更新時(shí)間:2025年09月16日 11:33:21   作者:好運(yùn)仔dzl  
本文主要介紹了LogBack+MybatisPlus實(shí)現(xiàn)打印sql日志,設(shè)置異步appender實(shí)現(xiàn)按天滾動(dòng)切割日志,保留3天歷史并自動(dòng)清理,替代P6Spy避免日志過(guò)大,同時(shí)需配置MybatisPlus日志輸出路徑,并區(qū)分MyBatis與MyBatisPlus日志輸出

首先在配置文件里面配置MybatisPlus的打印日志的相關(guān)配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl  # 使用 Slf4j 作為日志實(shí)現(xiàn)

然后在logback-spring.xml配置中定義一個(gè)appender用于輸出sql日志,appender是logback的日志輸出器,通過(guò)file指定日志輸出的目錄和文件名稱(chēng),rollingPolicy表示是滾動(dòng)策略,按天滾動(dòng)切割日志文件進(jìn)行備份,也就是當(dāng)天的日志會(huì)在寫(xiě)sql.log里面,歷史日志,例如說(shuō)昨天的日志會(huì)被切割一份另外存起來(lái),maxHistory是只存3天日志,其他的歷史日志都會(huì)被刪除掉,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="log.path" value="./logs"/>
    <property name="console.log.pattern"
              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) [%X{traceId}] %green([%thread]) %boldMagenta(%logger{36})[%line] - %msg%n"/>
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5level] [%X{traceId}] [%thread] %logger{36}[%line] - %msg%n"/>
 
    <contextListener class="com.xdf.smart.edu.common.log.listener.TtlMDCListener" />
    <!-- 控制臺(tái)輸出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>
 
    <!-- SQL 日志 appender -->
    <appender name="file_sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sql.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 3 天 -->
            <maxHistory>3</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 過(guò)濾的級(jí)別,只記錄 DEBUG 及以上級(jí)別的日志 -->
            <level>DEBUG</level>
        </filter>
    </appender>
 
    <!-- sql異步輸出 -->
    <appender name="async_sql" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊(duì)列的80%已滿,則會(huì)丟棄 TRACE、DEBUG、INFO 級(jí)別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊(duì)列的深度,該值會(huì)影響性能.默認(rèn)值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個(gè) -->
        <appender-ref ref="file_sql"/>
    </appender>
 
    <!-- 統(tǒng)一打印 MyBatis 和 MyBatis-Plus 的 SQL 相關(guān)日志 -->
    <logger name="com.baomidou.mybatisplus" level="DEBUG" additivity="false">
        <appender-ref ref="async_sql"/>
    </logger>
 
    <!--系統(tǒng)操作日志-->
    <root level="INFO">
        <appender-ref ref="console"/>
    </root>
 
</configuration>

上面就是單純配了一個(gè)sql日志打印的appender,用來(lái)打印sql執(zhí)行日志,運(yùn)行jar包后會(huì)在jar包的同級(jí)目錄自己創(chuàng)建一個(gè)log文件夾,里面放sql.log文件。

在 Logback 里,logger 與 root 標(biāo)簽都能引用 appender 來(lái)輸出日志。

  • logger 標(biāo)簽:可指定特定類(lèi)或包的日志處理規(guī)則,借助 name 屬性指定類(lèi)或包名,能精準(zhǔn)控制日志輸出。
  • root 標(biāo)簽:作為所有 logger 的父 logger,定義了默認(rèn)的日志處理規(guī)則。若某個(gè) logger 沒(méi)有特別指定處理規(guī)則,就會(huì)使用 root 標(biāo)簽的規(guī)則。

所以上面的配置就是在logger標(biāo)簽里使用async_sql這個(gè)appender來(lái)打印sql日志,而async_sql其實(shí)就只是配置了異步輸出,在async_sql里面又添加了file_sql來(lái)打印sql日志,這樣可以實(shí)現(xiàn)異步打印sql執(zhí)行日志,需要注意的是要記得修改上面logger標(biāo)簽里面的mapper接口的類(lèi)路徑

下面提供完整的LogBack配置,通常就是打印info、error日志、sql日志,由于平常用日志排查問(wèn)題用的少,所以這里只保留3天歷史,特別是sql日志,很快就會(huì)文件變得很大,因?yàn)閟ql執(zhí)行的日志都會(huì)寫(xiě)進(jìn)去,所以更不能保留太久,之前就是sql日志都是通過(guò)P6Spy去寫(xiě)入到同一個(gè)文件里面,導(dǎo)致直接日志文件占了40多G的內(nèi)存,所以這里改成了用mybatisplus日志切割,下面提供了常用的日志配置,注意我這個(gè)系統(tǒng)是因?yàn)橥瑫r(shí)用來(lái)mybatis和mybatisPlus,所以兩個(gè)日志都要打印

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="log.path" value="./logs"/>
    <property name="console.log.pattern"
              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) [%X{traceId}] %green([%thread]) %boldMagenta(%logger{36})[%line] - %msg%n"/>
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5level] [%X{traceId}] [%thread] %logger{36}[%line] - %msg%n"/>
 
    <contextListener class="com.xdf.smart.edu.common.log.listener.TtlMDCListener" />
    <!-- 控制臺(tái)輸出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>
 
    <!-- SQL 日志 appender -->
    <appender name="file_sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sql.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 3 天 -->
            <maxHistory>3</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 過(guò)濾的級(jí)別,只記錄 DEBUG 及以上級(jí)別的日志 -->
            <level>DEBUG</level>
        </filter>
    </appender>
 
    <!-- 系統(tǒng)日志輸出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/exam-mark-info.log</file>
        <!-- 滾動(dòng)策略:基于時(shí)間創(chuàng)建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/exam-mark-info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 3天 -->
            <maxHistory>3</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 過(guò)濾的級(jí)別 -->
            <level>INFO</level>
            <!-- 匹配時(shí)的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時(shí)的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/exam-mark-error.log</file>
        <!-- 滾動(dòng)策略:基于時(shí)間創(chuàng)建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/exam-mark-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 3天 -->
            <maxHistory>3</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 過(guò)濾的級(jí)別 -->
            <level>ERROR</level>
            <!-- 匹配時(shí)的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時(shí)的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- info異步輸出 -->
    <appender name="async_info" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊(duì)列的80%已滿,則會(huì)丟棄 TRACE、DEBUG、INFO 級(jí)別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊(duì)列的深度,該值會(huì)影響性能.默認(rèn)值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個(gè) -->
        <appender-ref ref="file_info"/>
    </appender>
 
    <!-- error異步輸出 -->
    <appender name="async_error" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊(duì)列的80%已滿,則會(huì)丟棄 TRACE、DEBUG、INFO 級(jí)別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊(duì)列的深度,該值會(huì)影響性能.默認(rèn)值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個(gè) -->
        <appender-ref ref="file_error"/>
    </appender>
 
    <!-- sql異步輸出 -->
    <appender name="async_sql" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊(duì)列的80%已滿,則會(huì)丟棄 TRACE、DEBUG、INFO 級(jí)別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊(duì)列的深度,該值會(huì)影響性能.默認(rèn)值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個(gè) -->
        <appender-ref ref="file_sql"/>
    </appender>
 
    <!-- 【打印MyBatisPlus條件構(gòu)造器的日志】 -->
    <logger name="com.baomidou.mybatisplus" level="DEBUG" additivity="false">
        <appender-ref ref="async_sql"/>
    </logger>
    <!-- 這個(gè)logger的name需要改成自己mapper接口的類(lèi)路徑【打印MyBatis日志】 -->
    <logger name="com.xxx.mapper" level="DEBUG">
        <appender-ref ref="async_sql"/>
    </logger>
 
    <!--系統(tǒng)操作日志-->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="async_info"/>
        <appender-ref ref="async_error"/>
    </root>
 
</configuration>

到此這篇關(guān)于LogBack+MybatisPlus實(shí)現(xiàn)打印sql日志的文章就介紹到這了,更多相關(guān)MybatisPlus LogBack 打印sql日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security實(shí)現(xiàn)退出登錄和退出處理器

    Spring Security實(shí)現(xiàn)退出登錄和退出處理器

    本文主要介紹了Spring Security實(shí)現(xiàn)退出登錄和退出處理器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java使用FreeMarker來(lái)實(shí)現(xiàn)Word自定義導(dǎo)出功能

    Java使用FreeMarker來(lái)實(shí)現(xiàn)Word自定義導(dǎo)出功能

    Java FreeMarker是一個(gè)用Java語(yǔ)言編寫(xiě)的模板引擎,它可以基于模板來(lái)生成文本輸出,并且與Web容器無(wú)關(guān),在對(duì)一些特定導(dǎo)出功能,使用常規(guī)Excel無(wú)法解決的,通常使用Word來(lái)實(shí)現(xiàn)導(dǎo)出功能,這篇介紹下如何在Java中使用FreeMarker模板注入方式來(lái)實(shí)現(xiàn)Word導(dǎo)出功能
    2025-09-09
  • Java完整實(shí)現(xiàn)記事本代碼

    Java完整實(shí)現(xiàn)記事本代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)易記事本,較為詳細(xì)的分析了基于java實(shí)現(xiàn)記事本程序的完整過(guò)程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 使用jmx?exporter采集kafka指標(biāo)示例詳解

    使用jmx?exporter采集kafka指標(biāo)示例詳解

    這篇文章主要為大家介紹了使用jmx?exporter采集kafka指標(biāo)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java springboot項(xiàng)目jar發(fā)布過(guò)程解析

    Java springboot項(xiàng)目jar發(fā)布過(guò)程解析

    這篇文章主要介紹了Java springboot項(xiàng)目jar發(fā)布過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳解Java排序算法中的冒泡和選擇排序

    詳解Java排序算法中的冒泡和選擇排序

    這篇文章主要給大家介紹了Java排序算法中的冒泡排序和選擇排序,文中有詳細(xì)的圖文解釋和代碼示例,對(duì)我們學(xué)習(xí)Java算法有一定的幫助,感興趣的同學(xué)可以參考閱讀下
    2023-06-06
  • SpringCloudAlibaba整合服務(wù)網(wǎng)關(guān)GateWay教程

    SpringCloudAlibaba整合服務(wù)網(wǎng)關(guān)GateWay教程

    文章介紹了Spring Cloud Gateway和Zuul的區(qū)別,并詳細(xì)描述了如何使用Gateway進(jìn)行服務(wù)轉(zhuǎn)發(fā)和自定義TokenFilter實(shí)現(xiàn)參數(shù)攔截訪問(wèn)
    2026-01-01
  • Java中的異步操作CompletableFuture示例詳解

    Java中的異步操作CompletableFuture示例詳解

    CompletableFuture是Java8引入的異步編程工具,支持非阻塞的鏈?zhǔn)秸{(diào)用和組合操作,提供了強(qiáng)大的異步任務(wù)編排能力,本文通過(guò)實(shí)例代碼講解Java中的異步操作CompletableFuture,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Java面試題沖刺第三十天--數(shù)據(jù)庫(kù)(6)

    Java面試題沖刺第三十天--數(shù)據(jù)庫(kù)(6)

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于數(shù)據(jù)庫(kù)的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 快速解決Hash碰撞沖突的方法小結(jié)

    快速解決Hash碰撞沖突的方法小結(jié)

    這篇文章主要介紹了快速解決Hash碰撞沖突的方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

梁平县| 凉城县| 铜梁县| 错那县| 剑阁县| 勃利县| 崇州市| 阿城市| 汝州市| 鄄城县| 偃师市| 华阴市| 昌黎县| 同江市| 东阿县| 新民市| 长白| 武宁县| 科尔| 斗六市| 彭阳县| 河间市| 呈贡县| 武陟县| 嘉兴市| 永吉县| 四子王旗| 夏河县| 平凉市| 筠连县| 鹰潭市| 西青区| 北宁市| 铅山县| 永年县| 吉林市| 长岛县| 扶沟县| 大渡口区| 京山县| 左权县|