编程语言
首页 > 编程语言> > java – 如何从Hibernate中禁用SHOW WARNINGS?

java – 如何从Hibernate中禁用SHOW WARNINGS?

作者:互联网

使用Hibernate(4.3.8)和MySQL,我注意到一堆SHOW WARNINGS语句在活动日志中占用了相当大的带宽:

enter image description here

我搜索了一下,这是一个非常普遍的问题(for example),显然可以在increasing the log level to ERROR解决(而且解决方案是confirmed implemented,因为至少4.3.6).

问题是,我实际上并不知道如何做到这一点.我对Hibernate的了解是使用Hibernate所必需的最低限度.之前链接的帖子通过编辑logback.xml中的Logback设置解决了它,但我没有使用Logback.我正在使用所有默认设置:

>显然它以JBoss Logging为核心.
>我的类路径中没有任何其他日志记录依赖项(例如slf4j.jar),所以我绝对不会使用它们.日志消息正在写入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>

以下是构建路径中的依赖项;有Jettison和Joda,MySQL驱动程序,然后是Hibernate所需的依赖目录和其他内容:

07005

如何在此(默认设置)情况下增加日志级别或以其他方式禁用SHOW WARNINGS? This提到了“感兴趣的日志类别”,但我不确定它们与配置文件的关系. This page没有在“Logging”部分之外记录任何与日志相关的属性,它提到了SLF4J,但显然我没有使用SLF4J(我怎么可能,因为它不在我的类路径中).

解决方法:

默认情况下,hibernate框架启用MySQL的SHOW WARNING,每次查询都会触发,这会使MySQL的查询数量翻倍,应用程序可以实现性能问题.可以通过以下方式在hibernate中进一步记录SHOW WARNING:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper#handleAndClearWarnings()

让休眠选择合适的记录器.这可以通过添加:
-Dorg.jboss.logging.provider = slf4j或-Dorg.jboss.logging.provider = log4j作为JVM运行时参数.

对于slf4j logger,您需要配置logback.xml文件.添加这个:

<logger name="org.hibernate.type" level="ERROR" /> 

对于log4j logger,您需要将以下行添加到log4j.properties:

log4j.logger.org.hibernate.type=ERROR

标签:java,mysql,hibernate,hibernate-4-x
来源: https://codeday.me/bug/20190701/1350076.html