You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Logback配置实现Hibernate SQL语句的选择性打印

Logback配置实现Hibernate SQL语句的选择性打印(无需自定义Appender)

Absolutely! You can tick all your boxes using Logback's built-in tools—no custom appenders required. Let's walk through each of your requirements with concrete configuration examples:

1. 仅打印INSERT和UPDATE语句

Hibernate emits SQL logs under the org.hibernate.SQL logger. We can use Logback's RegexFilter to only keep statements starting with INSERT or UPDATE:

<configuration>
    <!-- 基础控制台Appender(无需自定义代码) -->
    <appender name="HIBERNATE_SQL" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 移除默认的"Hibernate: "前缀 -->
            <pattern>%replace(%msg){'^Hibernate: ', ''}%n</pattern>
        </encoder>
        <!-- 过滤规则:仅保留INSERT/UPDATE语句 -->
        <filter class="ch.qos.logback.core.filter.RegexFilter">
            <!-- 若需要忽略大小写匹配,可在开头添加(?i) -->
            <regex>^(INSERT|UPDATE)\s</regex>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 关联Hibernate SQL日志记录器 -->
    <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
        <appender-ref ref="HIBERNATE_SQL"/>
    </logger>

    <!-- 其他Logback基础配置(如根日志记录器) -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

2. 仅打印特定表的SQL操作

调整RegexFilter中的正则表达式,即可针对特定表过滤日志。比如仅保留user_account表的INSERT/UPDATE操作:

<filter class="ch.qos.logback.core.filter.RegexFilter">
    <!-- 匹配涉及user_account表的INSERT/UPDATE语句 -->
    <regex>^(INSERT|UPDATE).*user_account</regex>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

小提示:如果需要忽略SQL关键字和表名的大小写,可在正则开头添加(?i),即(?i)^(INSERT|UPDATE).*user_account。

3. 直接从"insert into"开始输出(去掉前缀)

配置中的%replace转换器专门处理这个需求:它会把Hibernate默认添加在每条SQL日志前的Hibernate: 前缀替换为空字符串,直接输出原始SQL语句。核心配置就是:

<pattern>%replace(%msg){'^Hibernate: ', ''}%n</pattern>

关键说明

  • 无需自定义Appender:所有用到的组件(ConsoleAppender、RegexFilter、%replace转换器)都是Logback内置的,完全不需要编写自定义代码。
  • 参数化SQL补充:如果还需要打印SQL参数值,可以将org.hibernate.type.descriptor.sql.BasicBinder日志记录器设为TRACE级别,同样可以给它添加类似的过滤规则。

内容的提问来源于stack exchange,提问作者Punter Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:24