在 JBoss 和 Hibernate 环境中指定日志记录
Specifying logging in a JBoss and Hibernate environment
我们在 JBoss EAP 6.4 上有一个基于 Java 的网络应用 运行。我们从代码的某些部分收到了太多的日志消息,例如,数以千计的
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>
根据此 blog 的建议,我们注释掉了 show_sql
行,因为我们希望更好地控制日志记录。这样做之后,正如预期的那样,休眠日志记录消失了。接下来,我们尝试重新打开日志记录,使用 JBoss 的 standalone.xml 文件并将 org.hibernate.SQL
的级别设置为 INFO
。
<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>
这似乎不起作用。 None 的原始 Hibernate 日志消息出现。为什么?
正如我所提到的,最终我们希望我们的消息输出更细粒度,即,抑制某些 Hibernate 持久性操作的日志记录,同时为其他人启用它。但首先我需要弄清楚基本问题。
顺便说一句,我在 Java 调试器中设置了一个断点来检查调试设置。
Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
Level sqlOrigLogLevel = sqlLogger.getLevel();
显示INFO
。
Hibernate 在 DEBUG 级别登录 org.hibernate.SQL
类别,您的配置将其限制为 INFO,因此它们被静音。如果您想查看日志,您需要将该级别降低到 DEBUG。
这与 hibernate.show_sql
不同,当启用该选项时,它使用控制台,而不是记录器。所以它可能应该被禁用
我们在 JBoss EAP 6.4 上有一个基于 Java 的网络应用 运行。我们从代码的某些部分收到了太多的日志消息,例如,数以千计的
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>
根据此 blog 的建议,我们注释掉了 show_sql
行,因为我们希望更好地控制日志记录。这样做之后,正如预期的那样,休眠日志记录消失了。接下来,我们尝试重新打开日志记录,使用 JBoss 的 standalone.xml 文件并将 org.hibernate.SQL
的级别设置为 INFO
。
<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>
这似乎不起作用。 None 的原始 Hibernate 日志消息出现。为什么?
正如我所提到的,最终我们希望我们的消息输出更细粒度,即,抑制某些 Hibernate 持久性操作的日志记录,同时为其他人启用它。但首先我需要弄清楚基本问题。
顺便说一句,我在 Java 调试器中设置了一个断点来检查调试设置。
Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
Level sqlOrigLogLevel = sqlLogger.getLevel();
显示INFO
。
Hibernate 在 DEBUG 级别登录 org.hibernate.SQL
类别,您的配置将其限制为 INFO,因此它们被静音。如果您想查看日志,您需要将该级别降低到 DEBUG。
这与 hibernate.show_sql
不同,当启用该选项时,它使用控制台,而不是记录器。所以它可能应该被禁用