1

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

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

我可以只要求 log4j 只记录插入查询吗?

P6SPY 对我来说似乎有点过分了。 http://sourceforge.net/projects/p6spy/

4

2 回答 2

2

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

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

这是一个在网上找到的简单示例:

<?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 它不允许你匹配通配符,这意味着我猜你的情况是死路一条。如果您深入研究过滤器源代码,编写自己的代码应该很容易。

于 2013-01-07T21:48:50.143 回答
0

您可以将过滤应用于:org.hibernate.type.descriptor.sql.BasicBinder

于 2013-05-20T13:32:01.243 回答