Spring boot中限制 Mybatis SQL日志的大字段輸出問(wèn)題
由于現(xiàn)有的項(xiàng)目框架中,針對(duì)MyBatis的SQL日志,會(huì)完整的輸出sql語(yǔ)句及參數(shù)內(nèi)容。
存在對(duì)longtext、clob等大字段,在執(zhí)行INSERT、UPDATA語(yǔ)句中,導(dǎo)致控制臺(tái)輸出問(wèn)題:
- 日志文件迅速膨脹
- JVM內(nèi)存異常

通過(guò) Logback 或 Log4j2 的自定義 Converter 或 Filter,對(duì) MyBatis 打印的 PreparedStatement 參數(shù)進(jìn)行截?cái)嗷蛎撁簟?/p>
可以直接通修改定日志級(jí)別,限制Debug級(jí)別
1、創(chuàng)建自定義轉(zhuǎn)換器
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
/***
*
* @author xuancg
* @date 2025/9/30
*/
public class SqlParamMaskingConverter extends ClassicConverter {
private static final int MAX_LENGTH = 400;
private static final String MASK = "...[MASKED: too long to show]";
@Override
public String convert(ILoggingEvent event) {
String message = event.getFormattedMessage();
// 匹配 PreparedStatement 的參數(shù)設(shè)置日志,如:? column1 = 'value'
if (message.startsWith("==> Parameters:") || message.startsWith("Parameters:")) {
return maskLongStrings(message);
}
return message;
}
private String maskLongStrings(String msg) {
// 簡(jiǎn)單處理:對(duì)單引號(hào)包裹的長(zhǎng)字符串進(jìn)行截?cái)?
if(msg.length() > MAX_LENGTH){
return msg.substring(0, MAX_LENGTH) + MASK;
}
return msg;
}
}2、注冊(cè)到logback.xml
主要修改內(nèi)容:
<conversionRule conversionWord="maskedMsg" converterClass="com.xx.SqlParamMaskingConverter"/>
<!-- 日志輸出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %maskedMsg%n" /><configuration>
<!-- 注冊(cè)自定義轉(zhuǎn)換器 -->
<conversionRule conversionWord="maskedMsg" converterClass="com.xx.SqlParamMaskingConverter"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %maskedMsg%n</pattern>
</encoder>
</appender>
<!-- 只對(duì) MyBatis 的 SQL 日志啟用 -->
<logger name="org.apache.ibatis.logging.jdbc.PreparedStatementLogger" level="DEBUG">
<appender-ref ref="STDOUT"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>到此這篇關(guān)于Spring boot中 限制 Mybatis SQL日志的大字段輸出的文章就介紹到這了,更多相關(guān)Spring boot限制Mybatis SQL日志輸出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn)
這篇文章主要給大家介紹了關(guān)于使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn),在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因?yàn)椴迦氲膶?shí)體類數(shù)據(jù)id為空,后面的邏輯還需要這個(gè)id,需要的朋友可以參考下2023-09-09
Spring Cloud Gateway重試機(jī)制的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Gateway重試機(jī)制的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
IDEA如何對(duì)多線程進(jìn)行debug的示例詳解
開(kāi)發(fā)中使用到多線程的時(shí)候不少,但是debug起來(lái)還是比較困難的,因?yàn)槟J(rèn)每次只會(huì)進(jìn)入一個(gè)線程,這樣有些問(wèn)題是發(fā)現(xiàn)不了的,其實(shí)IDEA也是支持進(jìn)入每個(gè)線程來(lái)debug的,本文給大家介紹了IDEA如何對(duì)多線程進(jìn)行debug的示例,需要的朋友可以參考下2024-05-05
在Spring Boot中實(shí)現(xiàn)HTTP緩存的方法
緩存是HTTP協(xié)議的一個(gè)強(qiáng)大功能,但由于某些原因,它主要用于靜態(tài)資源,如圖像,CSS樣式表或JavaScript文件。本文重點(diǎn)給大家介紹在Spring Boot中實(shí)現(xiàn)HTTP緩存的方法,感興趣的朋友跟隨小編一起看看吧2018-10-10
基于apache poi根據(jù)模板導(dǎo)出excel的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇基于apache poi根據(jù)模板導(dǎo)出excel的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Java傳入用戶名和密碼并自動(dòng)提交表單實(shí)現(xiàn)登錄到其他系統(tǒng)的實(shí)例代碼
這篇文章主要介紹了Java傳入用戶名和密碼并自動(dòng)提交表單實(shí)現(xiàn)登錄到其他系統(tǒng),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象
這篇文章主要為大家介紹分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
Java 運(yùn)算符 動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java 運(yùn)算符 動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-04-04

