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

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

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

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

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

然后在logback-spring.xml配置中定義一個appender用于輸出sql日志,appender是logback的日志輸出器,通過file指定日志輸出的目錄和文件名稱,rollingPolicy表示是滾動策略,按天滾動切割日志文件進行備份,也就是當天的日志會在寫sql.log里面,歷史日志,例如說昨天的日志會被切割一份另外存起來,maxHistory是只存3天日志,其他的歷史日志都會被刪除掉,如下所示

<?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" />
    <!-- 控制臺輸出 -->
    <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">
            <!-- 過濾的級別,只記錄 DEBUG 及以上級別的日志 -->
            <level>DEBUG</level>
        </filter>
    </appender>
 
    <!-- sql異步輸出 -->
    <appender name="async_sql" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄 TRACE、DEBUG、INFO 級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <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>

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

在 Logback 里,logger 與 root 標簽都能引用 appender 來輸出日志。

  • logger 標簽:可指定特定類或包的日志處理規(guī)則,借助 name 屬性指定類或包名,能精準控制日志輸出。
  • root 標簽:作為所有 logger 的父 logger,定義了默認的日志處理規(guī)則。若某個 logger 沒有特別指定處理規(guī)則,就會使用 root 標簽的規(guī)則。

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

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

<?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" />
    <!-- 控制臺輸出 -->
    <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">
            <!-- 過濾的級別,只記錄 DEBUG 及以上級別的日志 -->
            <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>
        <!-- 滾動策略:基于時間創(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">
            <!-- 過濾的級別 -->
            <level>INFO</level>
            <!-- 匹配時的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/exam-mark-error.log</file>
        <!-- 滾動策略:基于時間創(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">
            <!-- 過濾的級別 -->
            <level>ERROR</level>
            <!-- 匹配時的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- info異步輸出 -->
    <appender name="async_info" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄 TRACE、DEBUG、INFO 級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <appender-ref ref="file_info"/>
    </appender>
 
    <!-- error異步輸出 -->
    <appender name="async_error" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄 TRACE、DEBUG、INFO 級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <appender-ref ref="file_error"/>
    </appender>
 
    <!-- sql異步輸出 -->
    <appender name="async_sql" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄 TRACE、DEBUG、INFO 級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <appender-ref ref="file_sql"/>
    </appender>
 
    <!-- 【打印MyBatisPlus條件構(gòu)造器的日志】 -->
    <logger name="com.baomidou.mybatisplus" level="DEBUG" additivity="false">
        <appender-ref ref="async_sql"/>
    </logger>
    <!-- 這個logger的name需要改成自己mapper接口的類路徑【打印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實現(xiàn)打印sql日志的文章就介紹到這了,更多相關(guān)MybatisPlus LogBack 打印sql日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    Java使用FreeMarker來實現(xiàn)Word自定義導出功能

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

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

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

    使用jmx?exporter采集kafka指標示例詳解

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

    Java springboot項目jar發(fā)布過程解析

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

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

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

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

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

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

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

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

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

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

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

最新評論

许昌市| 桂阳县| 大渡口区| 偏关县| 涡阳县| 霍城县| 阜阳市| 乌恰县| 将乐县| 积石山| 五寨县| 宣城市| 平阴县| 禄丰县| 大庆市| 海林市| 双鸭山市| 青海省| 公主岭市| 开鲁县| 军事| 韩城市| 临夏县| 贡山| 安溪县| 山阴县| 孟连| 金塔县| 万全县| 绥芬河市| 寿宁县| 保亭| 陕西省| 双牌县| 阿克苏市| 沙湾县| 图们市| 微博| 乐东| 浦江县| 安西县|