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

Mysql 如何使用Hibernate和log4j只记录插入和更新?,mysql,spring,hibernate,log4j,Mysql,Spring,Hibernate,Log4j,我有一个基于spring的webapp,它使用Hibernate查询mysql。当我使用log4j.logger.org.hibernate.type=trace启用跟踪日志记录时,所有带参数的查询都会记录到控制台。这使得webapp搜索查询速度变慢 我只需要记录对数据库的修改。最好是向mysql服务器发出insert/update查询。最简单和最可靠的方法是什么 我可以让log4j只记录插入查询吗 对我来说,这似乎是过分了。 log4j 2扩展过滤器支持。您可能想尝试一下 对于log4j1.2

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

我只需要记录对数据库的修改。最好是向mysql服务器发出insert/update查询。最简单和最可靠的方法是什么

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

对我来说,这似乎是过分了。

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

对于log4j1.2.x,有一个是“附加”包的一部分

下面是一个快速示例:



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

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

请检查此项:和此项:。两者的结合,在一定程度上可能会对你有所帮助。可能的重复不是真的。当我将org.hibernate.SQL设置为ALL/TRACE并将org.hibernate.type设置为TRACE时,它会记录所有内容,包括所有返回行的值。我只想用参数记录SQL查询,这也只是为了插入和更新。否则事情会慢很多。我找不到一种方法来限制日志记录仅限于我在原始问题中要求的插入和更新。如果我只是使用
--general log
在mysql级别登录会更好吗?这样会记录实际的sql查询,但不会记录结果。如果SQL查询返回1000个结果。然后将它们全部转储到控制台会使我的代码非常慢,但是只转储生成结果的单个查询会很有用吗?事实上,我只需要记录不返回结果的插入和更新。但我不认为有一种简单的方法可以只记录插入和更新,而不记录选择。你对MySQL日志记录有何看法?@iamrohitbanga,“然后将它们全部转储到控制台会使我的代码非常慢”-你是否确实知道,也就是说,你是否确实测量过这一点?我怀疑它对性能有明显的影响。“我只需要记录插入和更新”-我知道,这就是为什么我指示您使用log4j过滤器,它们将满足您的要求。当然,您可以始终使用数据库日志记录,但是您必须在两个不同的日志文件中搜索以进行分析。而且您仍然没有满足您的要求(不记录查询)。是的,这肯定是较慢的。对于我的示例数据,速度明显较慢。如果使用mysql进行日志记录不顺利,我将研究log4j过滤器。谢谢。@iamrohitbanga,“如果使用mysql进行日志记录不顺利的话”-我确信它进行得很顺利,但您无法进行筛选。
<?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>