【问题标题】:Disable Hibernate SQL logging for specific class禁用特定类的 Hibernate SQL 日志记录
【发布时间】:2012-11-16 10:10:40
【问题描述】:

有没有办法禁用记录特定类的 SQL 语句?

我通过定义一个一般来说很好的 log4j 记录器来启用 SQL 语句记录。不幸的是,我有一个类被非常频繁地调用并产生大量的控制台输出。我想仅禁用单个类的日志记录。这可能吗?

【问题讨论】:

  • 我很确定这是不可能的。
  • 很可能你做不到。

标签: hibernate log4j


【解决方案1】:

不,你问的是不可能的。如果您不想记录特定类(映射到表)但该表连接到另一个表怎么办。如果表是联接的一部分,您希望日志显示信息吗?

【讨论】:

    【解决方案2】:

    虽然可以定义每个类在 log4j 1 中记录的级别,例如:

    <!-- Suppress success logging from InteractiveAuthenticationSuccessEvent -->
    <logger name="org.springframework.security">
        <level value="ERROR"/>
    </logger>
    

    无法微调。

    为了更好地控制您的日志记录,您需要升级 log4j 2。

    在 Log4j 2 中,您可以使用过滤器:

    http://logging.apache.org/log4j/2.x/manual/filters.html

    这是一个使用正则表达式过滤器的 sn-p 配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="warn" name="MyApp" packages="">
      <appenders>
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
          <RegexFilter regex=".* test .*" onMatch="ACCEPT" onMismatch="DENY"/>
          <PatternLayout>
            <pattern>%d %p %C{1.} [%t] %m%n</pattern>
          </PatternLayout>
          <TimeBasedTriggeringPolicy />
        </RollingFile>
      </appenders>
      <loggers>
        <root level="error">
          <appender-ref ref="RollingFile"/>
        </root>
      </loggers>
    </configuration>    
    

    【讨论】:

    • 那不是他要的。 Hibernate 有一个 org.hibernate.SQL 记录器,用于记录所有生成的 SQL。他希望阻止与特定实体相关的休眠日志记录查询被记录到此记录器。
    • 必须再具体一点:我想把Hibernate引入过去使用Spring JdbcTemplate的项目中。我想禁用通过 JdbcTemplate 执行的所有语句的日志记录。加载 Hibernate 对象时的 SQL 语句正常。
    • 你可以看看 log4j 2。看看我更新的答案。
    • 如果您对此感到满意并解决了您的问题,请点击勾选接受此答案
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多