Jas*_*n C 5 java mysql hibernate hibernate-4.x
在 MySQL 中使用 Hibernate (4.3.8),我注意到SHOW WARNINGS在活动日志中占用了大量带宽的一堆语句:
我四处搜索,这是一个非常常见的问题(例如),显然可以通过将日志级别增加到 ERROR来解决(并且该解决方案至少从 4.3.6 起已确认实施)。
问题是,我实际上不知道如何做到这一点。我对 Hibernate 的了解是使用它所需的最低限度的知识。之前链接的帖子通过编辑 Logback 设置解决了这个问题,logback.xml但我没有使用 Logback。我正在使用所有默认设置:
System.err.所以我实际上不确定如何做到这一点。这是我的配置文件:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/xxxxx</property>
<property name="connection.username">xxxxx</property>
<property name="connection.password">xxxxx</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.isolation">2</property>
<property name="connection.pool_size">10</property>
<property name="current_session_context_class">thread</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- <property name="show_sql">true</property> -->
<!-- <property name="hbm2ddl.auto">create</property> -->
<mapping resource="hibernate.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)
以下是构建路径中的依赖项;有 Jettison 和 Joda,MySQL 驱动程序,然后是 Hibernaterequired依赖目录中的所有内容,仅此而已:
SHOW WARNINGS在这种(默认设置)情况下,如何提高日志级别或以其他方式禁用?这提到了“感兴趣的日志类别”,但我不确定这些与配置文件有什么关系。此页面在“日志记录”部分之外没有记录任何与日志相关的属性,其中提到了 SLF4J,但显然我没有使用 SLF4J(我怎么会这样,因为它不在我的类路径中)。
好的。我明白了这一点,并在这个过程中学到了很多东西。
在以下假设下...
... Hibernate 将通过 JBoss Logging 自动选择 JDK 日志记录,并且java.util.logging可以使用该工具来控制日志级别。因此,在根记录器级别将所有 JDK 日志的日志级别设置为SEVERE, (无论您在 Hibernate 初始化之前还是之后执行此操作都没有关系,请参见下文)可成功停止命令SHOW WARNING:
LogManager.getLogManager().getLogger("").setLevel(Level.SEVERE);
Run Code Online (Sandbox Code Playgroud)
然而,这是一种霰弹枪方法,它为所有Logger级别设置为(从父级继承)的注册者设置日志级别null。
我通过以下方式找到了上述解决方案:
LogManager#getLoggerNames()。有相当多的来自 Hibernate,这证实了第 1 点。SHOW WARNINGS但找不到。我确实知道它不是“ org.hibernate.SQL”(更改日志级别没有效果),也不是“ org.hibernate”(该日志实际上并不存在)。null(从父级继承)。SHOW WARNINGs,但这没什么大不了的。这就是我得出上述结论的方式,这使得我的解决方案仍然存在以下草率问题:
SEVERE,并验证它是否有效。不同的日志级别也可能有效,但我没有测试。我试图明确找出 Hibernate 自动选择的记录器,但无法确定如何做到这一点(有人知道吗?)。我唯一的疯狂猜测是其中的某些内容ServiceRegistry,但似乎没有与日志记录相关的内容Service,或者至少我找不到。
一般来说,显式配置日志记录工具,然后根据其文档进行配置是更可预测的,例如,上面的解决方案仅通过向类路径添加另一个 JAR 即可中断。然而,对于快速/一次性/无关紧要的项目,您只是最小化配置文件等,这似乎是删除命令的最简单方法SHOW WARNING。