如何使用Hibernate和log4j仅记录插入和更新?

时间:2013-01-07 18:09:54

标签: mysql spring hibernate log4j

我有一个基于Spring的webapp,使用Hibernate来查询mysql。当我使用log4j.logger.org.hibernate.type=TRACE启用跟踪日志记录时,所有带有参数的查询都会记录到控制台。这使得webapp对于搜索查询来说很慢。

我只需要记录对数据库的修改。优选地,向mysql服务器发出插入/更新查询。这样做最简单,最可靠的方法是什么?

我可以让log4j仅记录插入查询吗?

为了我的目的,P6SPY似乎有点过分了。 http://sourceforge.net/projects/p6spy/

2 个答案:

答案 0 :(得分:2)

log4j 2扩展过滤器支持。您可能想尝试RegexFilter

对于log4j 1.2.x,StringMatchFilter是“extras”包的一部分。

以下是online的简短示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="CustomAppender" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="custom.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5000KB"/>
    <param name="maxBackupIndex" value="5"/> 
          <layout class="org.apache.log4j.PatternLayout">
                  <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />
          </layout>

          <filter class="org.apache.log4j.varia.StringMatchFilter">
                  <param name="StringToMatch" value="Here is DEBUG" />
                  <param name="AcceptOnMatch" value="true" />
          </filter>
  </appender>

  <root>
    <appender-ref ref="CustomAppender"/>
  </root>
</log4j:configuration>

然而,AFAIU它不允许你匹配通配符,这意味着你的情况下死胡同。如果你深入研究过滤器源代码,那么编写自己的代码应该很容易。

答案 1 :(得分:0)

您可以对以下内容应用过滤: org.hibernate.type.descriptor.sql.BasicBinder 代替