首页 > 解决方案 > 在 JBoss 和 Hibernate 环境中指定日志记录

问题描述

我们有一个在 JBoss EAP 6.4 上运行的基于 Java 的 webapp。我们从代码的某些部分获得了太多的日志消息,例如,数千条

15:06:31,400 INFO  [stdout] (pool-6-thread-1) Hibernate: select nextval ('hibernate_sequence')

在我们的 presistence.xml 中,我们有:

<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
    <property name="hibernate.connection.datasource" value="java:jboss/datasources/ourDS"/>
    <!-- Scan for annotated classes and Hibernate mapping XML files  -->
    <property name="hibernate.archive.autodetection" value="class, hbm"/>
    <property name="hibernate.hbm2ddl.auto" value="update" /> 
    <property name="hibernate.show_sql" value="true" />
    <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
</properties>

按照这个博客的建议,我们注释掉了这一show_sql行,因为我们希望更好地控制我们的日志记录。这样做之后,休眠日志记录消失了,正如预期的那样。接下来,我们尝试重新打开日志记录,使用 JBoss 的standalone.xml 文件并将级别设置org.hibernate.SQLINFO

<profile>
    <subsystem xmlns="urn:jboss:domain:logging:1.5">
        <console-handler name="CONSOLE">
            <level name="INFO"/>
            <formatter>
                <named-formatter name="COLOR-PATTERN"/>
            </formatter>
        </console-handler>
        <periodic-rotating-file-handler name="FILE" autoflush="true">
            <formatter>
                <named-formatter name="PATTERN"/>
            </formatter>
            <file relative-to="jboss.server.log.dir" path="server.log"/>
            <suffix value=".yyyy-MM-dd"/>
            <append value="true"/>
        </periodic-rotating-file-handler>
        <logger category="org.hibernate.SQL">
            <level name="INFO"/>
        </logger>
        <logger category="org.jboss.as.config">
    <!-- other config omitted -->
</profile>

这似乎不起作用。没有出现任何原始的 Hibernate 日志消息。为什么?

正如我所提到的,最终我们希望得到更细粒度的消息输出,即,抑制某些 Hibernate 持久性操作的日志记录,同时为其他操作启用它。但首先我需要弄清楚基本问题。

顺便说一句,我在 Java 调试器中设置了一个断点来检查调试设置。

Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
Level sqlOrigLogLevel = sqlLogger.getLevel();

它显示INFO.

标签: hibernateloggingjboss6.x

解决方案


Hibernate 在org.hibernate.SQLDEBUG 级别的类别中登录,您的配置将其限制为 INFO,因此它们被静音。如果要查看日志,则需要将该级别降低到 DEBUG。

这与 不同hibernate.show_sql,当启用该选项时,它使用控制台,而不是记录器。所以它可能应该被禁用


推荐阅读