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

通過 Logback 或 Log4j2 的自定義 Converter 或 Filter,對 MyBatis 打印的 PreparedStatement 參數(shù)進行截斷或脫敏。
可以直接通修改定日志級別,限制Debug級別
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) {
// 簡單處理:對單引號包裹的長字符串進行截斷
if(msg.length() > MAX_LENGTH){
return msg.substring(0, MAX_LENGTH) + MASK;
}
return msg;
}
}2、注冊到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>
<!-- 注冊自定義轉(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>
<!-- 只對 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot 的java -jar命令啟動原理詳解
這篇文章主要介紹了Spring Boot 的java -jar命令啟動原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
IDEA創(chuàng)建SpringBoot父子Module項目的實現(xiàn)
本文主要介紹了IDEA創(chuàng)建SpringBoot父子Module項目的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Java實戰(zhàn)之用Swing實現(xiàn)通訊錄管理系統(tǒng)
今天給大家?guī)淼氖荍ava實戰(zhàn)的相關(guān)知識,文章圍繞著Swing實現(xiàn)通訊錄管理系統(tǒng)展開,文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下2021-06-06
Java并發(fā)之條件阻塞Condition的應(yīng)用代碼示例
這篇文章主要介紹了Java并發(fā)之條件阻塞Condition的應(yīng)用代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02
Spring?Boot?中實現(xiàn)?WebSocket?集群思路詳解
本文介紹了如何在SpringBoot中實現(xiàn)WebSocket集群處理,解決了會話共享和消息同步問題,通過分布式存儲(Redis)和消息隊列(RedisPub/Sub)實現(xiàn)跨節(jié)點通信,感興趣的朋友跟隨小編一起看看吧2025-12-12

