亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring boot中限制 Mybatis SQL日志的大字段輸出問題

 更新時間:2025年10月09日 09:25:07   作者:宣晨光  
文章介紹Springboot中MyBatis SQL日志因大字段輸出導(dǎo)致日志膨脹及JVM內(nèi)存問題,建議通過Logback或Log4j2自定義Converter/Filter實現(xiàn)參數(shù)截斷或脫敏,或調(diào)整日志級別限制調(diào)試信息,本文給大家介紹Spring boot中限制Mybatis SQL日志的大字段輸出問題,感興趣的朋友一起看看吧

由于現(xiàn)有的項目框架中,針對MyBatis的SQL日志,會完整的輸出sql語句及參數(shù)內(nèi)容。

存在對longtext、clob等大字段,在執(zhí)行INSERT、UPDATA語句中,導(dǎo)致控制臺輸出問題:

  • 日志文件迅速膨脹
  • JVM內(nèi)存異常

通過 LogbackLog4j2 的自定義 ConverterFilter,對 MyBatis 打印的 PreparedStatement 參數(shù)進(jìn)行截斷或脫敏。

可以直接通修改定日志級別,限制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) {
        // 簡單處理:對單引號包裹的長字符串進(jìn)行截斷
        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)文章

最新評論