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

MyBatis實(shí)戰(zhàn)指南之MyBatis日志詳解

 更新時(shí)間:2025年07月03日 10:42:41   作者:珹洺  
本文系統(tǒng)講解MyBatis日志模塊,涵蓋日志作用、框架選擇(SLF4J/Log4j等)、配置方法、源碼解析及日志級(jí)別控制,幫助開(kāi)發(fā)者掌握調(diào)試技巧與性能優(yōu)化實(shí)踐,感興趣的朋友跟隨小編一起看看吧

前言

  • 在上一篇博客中,我們深入剖析了 MyBatis 的緩存機(jī)制原理與實(shí)戰(zhàn)應(yīng)用
  • 作為 MyBatis 框架中另一重要的基礎(chǔ)設(shè)施,日志系統(tǒng)在項(xiàng)目開(kāi)發(fā)、調(diào)試及運(yùn)維階段承擔(dān)著關(guān)鍵作用 —— 它不僅能幫助開(kāi)發(fā)者追蹤 SQL 執(zhí)行流程、定位異常問(wèn)題,還能通過(guò)日志級(jí)別控制實(shí)現(xiàn)不同環(huán)境下的調(diào)試信息輸出管理。
  • 從本文開(kāi)始,我們將圍繞 MyBatis 日志模塊展開(kāi)系統(tǒng)講解,涵蓋 日志框架集成(Log4j/SLF4J 等)、配置方式、源碼解析及性能優(yōu)化 等核心內(nèi)容,幫助讀者全面掌握 MyBatis 日志體系的技術(shù)細(xì)節(jié)與最佳實(shí)踐。

一、為什么需要日志?

舉個(gè)生活中的例子:你網(wǎng)購(gòu)收到商品發(fā)現(xiàn)有問(wèn)題,打電話(huà)給客服時(shí),客服需要查看訂單記錄(日志)才能定位問(wèn)題。MyBatis的日志也是一樣的道理:

  • 開(kāi)發(fā)階段:打印SQL語(yǔ)句和參數(shù),幫你確認(rèn)寫(xiě)的SQL是否正確(比如有沒(méi)有拼錯(cuò)表名、where條件是否正確)
  • 調(diào)試階段:記錄異常信息(比如數(shù)據(jù)庫(kù)連接失敗、參數(shù)類(lèi)型錯(cuò)誤),快速定位報(bào)錯(cuò)位置
  • 生產(chǎn)階段:通過(guò)控制日志級(jí)別,只記錄重要信息(比如錯(cuò)誤日志),避免無(wú)關(guān)信息干擾

最常用的場(chǎng)景:當(dāng)你發(fā)現(xiàn)查詢(xún)結(jié)果不對(duì)時(shí),第一時(shí)間打開(kāi)日志看看實(shí)際執(zhí)行的SQL是什么,90%的問(wèn)題都能通過(guò)對(duì)比SQL找到原因!

二、日志框架怎么選?

MyBatis本身不自帶日志實(shí)現(xiàn),需要集成第三方日志框架。

  • 常見(jiàn)的框架有這幾種。
框架名稱(chēng)優(yōu)點(diǎn)缺點(diǎn)適合場(chǎng)景
SLF4J統(tǒng)一日志接口,支持多種實(shí)現(xiàn)(如Logback)不能單獨(dú)使用,必須搭配具體實(shí)現(xiàn)新項(xiàng)目首選,推薦搭配Logback
Log4j老牌框架,配置簡(jiǎn)單性能一般,新版本Log4j2已發(fā)布兼容舊項(xiàng)目
Log4j2性能更好,支持異步日志配置比Log4j復(fù)雜一點(diǎn)對(duì)性能要求高的項(xiàng)目
Java自帶JUL無(wú)需額外依賴(lài)功能簡(jiǎn)單,配置不夠靈活極簡(jiǎn)項(xiàng)目或臨時(shí)調(diào)試

1. 手把手教你集成(以最常用的SLF4J+Logback為例)

步驟1:添加依賴(lài)(Maven項(xiàng)目)

<!-- SLF4J接口 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.7</version>
</dependency>
<!-- Logback實(shí)現(xiàn) -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.13</version>
</dependency>

步驟2:在MyBatis配置文件中開(kāi)啟日志

mybatis-config.xml中添加:

<settings>
    <!-- 設(shè)置日志工廠(chǎng)為SLF4J -->
    <setting name="logImpl" value="SLF4J"/>
</settings>

步驟3:配置Logback日志文件

src/main/resources目錄下新建logback.xml,核心配置如下(重點(diǎn)看注釋?zhuān)?/p>

<configuration>
    <!-- 定義日志輸出格式 -->
    <pattern name="simplePattern">%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
    <!-- 控制臺(tái)輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${simplePattern}</pattern>
        </encoder>
    </appender>
    <!-- 重點(diǎn):配置MyBatis日志輸出 -->
    <logger name="org.apache.ibatis" level="DEBUG"/> <!-- 輸出MyBatis自身日志 -->
    <logger name="com.yourcompany.mapper" level="DEBUG"/> <!-- 輸出你的Mapper接口日志 -->
    <root level="INFO"> <!-- 全局日志級(jí)別,優(yōu)先級(jí)低于上面的logger -->
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

三、配置方式詳解

1. MyBatis自身的日志配置

mybatis-config.xml中,通過(guò)<settings>標(biāo)簽配置:

  • logImpl:指定使用的日志框架(可選值:SLF4J、LOG4J、LOG4J2、JUL、STDOUT_LOGGING、NO_LOGGING)
    <!-- 示例:使用Log4j2 -->
    <setting name="logImpl" value="LOG4J2"/>
  • lazyLoadingEnabledaggressiveLazyLoading:這兩個(gè)和延遲加載相關(guān)的日志,新手暫時(shí)不用管,保持默認(rèn)即可。

2. 日志級(jí)別控制

日志級(jí)別從低到高依次是:DEBUG < INFO < WARN < ERROR,級(jí)別越高,輸出的內(nèi)容越少。

  • 開(kāi)發(fā)階段:建議設(shè)為DEBUG,能看到完整的SQL語(yǔ)句和參數(shù)(比如:==> Preparing: SELECT * FROM user WHERE id=?
  • 生產(chǎn)階段:設(shè)為ERRORWARN,只記錄錯(cuò)誤和警告,避免日志文件過(guò)大

3. Spring Boot中怎么配?

如果你用Spring Boot,不需要單獨(dú)寫(xiě)MyBatis配置文件,直接在application.properties中配置:

# 開(kāi)啟MyBatis日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
# 配置具體Mapper的日志級(jí)別(比如只打印UserMapper的DEBUG日志)
logging.level.com.yourcompany.mapper.UserMapper=DEBUG

四、源碼解析:搞懂MyBatis日志底層邏輯

如果你對(duì)底層原理好奇,可以簡(jiǎn)單了解這幾個(gè)核心類(lèi),不用記代碼,知道它們的關(guān)系就行:

1. 日志接口 Log

MyBatis定義了一個(gè)統(tǒng)一的日志接口Log,所有日志框架都要實(shí)現(xiàn)這個(gè)接口。比如Slf4jImpl就是SLF4J的實(shí)現(xiàn)類(lèi),Log4jImpl是Log4j的實(shí)現(xiàn)類(lèi)。

2. 日志工廠(chǎng)LogFactory

它就像一個(gè)"工廠(chǎng)",根據(jù)你配置的logImpl,生產(chǎn)對(duì)應(yīng)的日志對(duì)象。比如你配置了SLF4J,它就會(huì)創(chuàng)建Slf4jImpl對(duì)象。

3. 自動(dòng)檢測(cè)機(jī)制

如果你的項(xiàng)目中同時(shí)存在多個(gè)日志框架(比如同時(shí)有Log4j和SLF4J),MyBatis會(huì)按以下順序自動(dòng)選擇:

SLF4J → LOG4J2 → LOG4J → JUL → STDOUT(控制臺(tái)輸出)→ NO_LOGGING(無(wú)日志)

所以建議只保留一個(gè)日志框架,避免沖突。

以上就是這篇博客的全部?jī)?nèi)容,下一篇我們將繼續(xù)探索MyBatis的更多精彩內(nèi)容。

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

相關(guān)文章

  • Springboot如何集成websocket

    Springboot如何集成websocket

    這篇文章主要介紹了Springboot如何集成websocket問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springboot責(zé)任鏈模式實(shí)現(xiàn)多級(jí)校驗(yàn)

    springboot責(zé)任鏈模式實(shí)現(xiàn)多級(jí)校驗(yàn)

    責(zé)任鏈模式是將鏈中的每一個(gè)節(jié)點(diǎn)看作是一個(gè)對(duì)象,每個(gè)節(jié)點(diǎn)處理的請(qǐng)求不同,且內(nèi)部自動(dòng)維護(hù)一個(gè)下一節(jié)點(diǎn)對(duì)象,下面我們來(lái)聊聊springboot如何利用責(zé)任鏈模式實(shí)現(xiàn)多級(jí)校驗(yàn)吧
    2024-11-11
  • idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決

    idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決

    這篇文章主要介紹了idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot整合七牛云上傳圖片的示例代碼

    SpringBoot整合七牛云上傳圖片的示例代碼

    本文就來(lái)介紹了SpringBoot整合七牛云上傳圖片的示例代碼,用戶(hù)在前端上傳圖片后,交由后端處理,上傳至七牛云,感興趣的可以了解一下
    2023-10-10
  • Java線(xiàn)程實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示

    Java線(xiàn)程實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示

    這篇文章主要為大家詳細(xì)介紹了Java線(xiàn)程實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 基于@RestControllerAdvice與@ControllerAdvice的區(qū)別說(shuō)明

    基于@RestControllerAdvice與@ControllerAdvice的區(qū)別說(shuō)明

    這篇文章主要介紹了@RestControllerAdvice與@ControllerAdvice的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 利用JStack排查死鎖問(wèn)題和CPU100%問(wèn)題

    利用JStack排查死鎖問(wèn)題和CPU100%問(wèn)題

    無(wú)論是再面試過(guò)程中還是再實(shí)際項(xiàng)目開(kāi)發(fā)當(dāng)中我們都有可能遇到這兩個(gè)問(wèn)題如何利用JStack排查死鎖問(wèn)題和CPU100%問(wèn)題,文中給出了詳細(xì)的排查過(guò)程和解決方法,需要的朋友可以參考下
    2023-12-12
  • java如何用正則表達(dá)式匹配與提取字符串

    java如何用正則表達(dá)式匹配與提取字符串

    一位以前的同事在群里面突然發(fā)了個(gè)需求,要通過(guò)正則表達(dá)式來(lái)取值,下面這篇文章主要給大家介紹了關(guān)于java如何用正則表達(dá)式匹配與提取字符串的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Springboot中使用lombok的@Data注解方式

    Springboot中使用lombok的@Data注解方式

    這篇文章主要介紹了Springboot中使用lombok的@Data注解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot集成SpirePDF實(shí)現(xiàn)文本替換功能

    SpringBoot集成SpirePDF實(shí)現(xiàn)文本替換功能

    SpirePDF是一個(gè)用于.NET平臺(tái)的高級(jí)PDF文檔處理庫(kù),它提供了一套完整的API,允許開(kāi)發(fā)者創(chuàng)建、編輯、轉(zhuǎn)換、合并、分割和解析PDF文件本文給大家介紹了SpringBoot集成SpirePDF實(shí)現(xiàn)文本替換功能,需要的朋友可以參考下
    2024-09-09

最新評(píng)論

汶川县| 修水县| 淮阳县| 山丹县| 盈江县| 湖口县| 桂阳县| 容城县| 陆川县| 临潭县| 高唐县| 油尖旺区| 元江| 郯城县| 新绛县| 上高县| 保山市| 米泉市| 遂平县| 西丰县| 吴旗县| 内黄县| 宁海县| 崇信县| 柏乡县| 许昌县| 松阳县| 纳雍县| 和林格尔县| 平遥县| 翁牛特旗| 乡城县| 龙山县| 江阴市| 土默特左旗| 宁国市| 东莞市| 汉川市| 汉沽区| 保德县| 淄博市|