使用 log4j,是否可以在启用 org.hibernate.type TRACE 日志记录的情况下隐藏 JDBC 返回的列值?

发布于 2024-10-08 04:19:32 字数 1616 浏览 0 评论 0原文

我正在 Seam Framework 项目上使用 log4j 跟踪 Hibernate 生成的 SQL 语句及其绑定参数。目前我有以下配置:

jboss-log4j.xml

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

...

   <appender name="SQL" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/sql.log"/>
      <param name="Append" value="true"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ABSOLUTE} [%c{1}] %X{username} %m%n"/>
      </layout>
   </appender>

   <category name="org.hibernate">
       <priority value="INFO"/>
       <appender-ref ref="SQL"/>
   </category>

   <category name="org.hibernate.SQL" additivity="false">
       <priority value="DEBUG"/>
       <appender-ref ref="SQL"/>
   </category>

   <category name="org.hibernate.HQL" additivity="false">
       <priority value="DEBUG"/>
       <appender-ref ref="SQL"/>
   </category>

   <category name="org.hibernate.type" additivity="false">
       <priority value="TRACE"/>
       <appender-ref ref="SQL"/>
   </category>

</log4j:configuration>

问题是生成的 sql.log 文件变得太笨重,因为每次页面访问时至少有 100k 文本附加到日志中。我想过滤掉“作为列返回”的 JDBC 消息,而只跟踪 INSERT/UPDATE 查询,但在 Hibernate 或 log4j 的文档中找不到这样的选项。使用手动脚本过程删除这些行是不可取的,因为我想减少 Web 服务器上的磁盘读/写。

是否可以阻止这些 SELECT 查询返回的 JDBC 值添加到日志文件中,同时保留参数值绑定?

I'm tracking Hibernate's generated SQL statements and their bound parameters using log4j on a Seam Framework project. Currently I have the below configuration:

jboss-log4j.xml:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

...

   <appender name="SQL" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/sql.log"/>
      <param name="Append" value="true"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ABSOLUTE} [%c{1}] %X{username} %m%n"/>
      </layout>
   </appender>

   <category name="org.hibernate">
       <priority value="INFO"/>
       <appender-ref ref="SQL"/>
   </category>

   <category name="org.hibernate.SQL" additivity="false">
       <priority value="DEBUG"/>
       <appender-ref ref="SQL"/>
   </category>

   <category name="org.hibernate.HQL" additivity="false">
       <priority value="DEBUG"/>
       <appender-ref ref="SQL"/>
   </category>

   <category name="org.hibernate.type" additivity="false">
       <priority value="TRACE"/>
       <appender-ref ref="SQL"/>
   </category>

</log4j:configuration>

The problem is the generated sql.log file becomes too unwieldy as at least 100k of text is appended to the log on each page visit. I would like to filter out the JDBC messages for "returning as column " and instead only track INSERT/UPDATE queries but can't find such an option in Hibernate or log4j's documentation. Removing these lines using a manual scripting process isn't desirable since I want to reduce disk reads/writes on the web server.

Is it possible to stop these returned JDBC values of SELECT queries from being added to the log file while keeping the parameter value bindings?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幼儿园老大 2024-10-15 04:19:32

不幸的是,这两个日志记录语句:

binding '...' to parameter: ...

returning '...' as column: ...

都源自同一个类 org.hibernate.type.NullableType ,并且记录在相同的 TRACE 级别上。这意味着您不能简单地过滤后一个日志语句而不影响第一个日志语句。

但是,如果您使用 Logback过滤器可能会派上用场。

Unfortunately both logging statements:

binding '...' to parameter: ...

and

returning '...' as column: ...

originate from the same class org.hibernate.type.NullableType and are logged on the same TRACE level. This means that you can't simply filter the latter log statement leaving the first one untouched.

However, if you are using Logback, filters might come to the rescue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文