Hibernate禁用日志记录

时间:2015-07-04 18:08:26

标签: java hibernate logging intellij-idea orm

我遇到了禁用hibernates日志系统的问题。 我尝试创建一个log4j.properties文件并将属性rootLogger设置为false但它没有做任何事情。

我在控制台中得到的是:

Jul 04, 2015 8:01:52 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
Jul 04, 2015 8:01:52 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.2.Final}
Jul 04, 2015 8:01:52 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Jul 04, 2015 8:01:52 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Jul 04, 2015 8:01:52 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: Database/hibernate.cfg.xml
Jul 04, 2015 8:01:52 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: Database/hibernate.cfg.xml
Jul 04, 2015 8:01:52 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
Jul 04, 2015 8:01:52 PM org.hibernate.cfg.Configuration addResource
INFO: HHH000221: Reading mappings from resource: Database/Entities/User.hbm.xml
Jul 04, 2015 8:01:52 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
Jul 04, 2015 8:01:52 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Jul 04, 2015 8:01:52 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Jul 04, 2015 8:01:52 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20
Jul 04, 2015 8:01:52 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
Jul 04, 2015 8:01:52 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/gameserver]
Jul 04, 2015 8:01:52 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=root, password=****}
Jul 04, 2015 8:01:53 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Jul 04, 2015 8:01:53 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
Jul 04, 2015 8:01:53 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory

如何禁用输出控制台的所有消息?

我正在使用Hibernate 4.2.2

3 个答案:

答案 0 :(得分:1)

尝试将根记录器设置为ERROR级别:

String

确保在类路径中有SLF4J和LOG4J,因为Hibernate可能会回退到使用其他日志框架。

当Hibernate开始检查日志记录提供程序时,尝试在log4j.logger.org.hibernate=error 中添加断点。

答案 1 :(得分:0)

我必须在我的maven中添加以下依赖项才能摆脱日志记录。我正在使用Hibernate 4和Log4j2

  • 的log4j-API
  • log4j的核
  • log4j-jcl //反向桥到log4j v1.x
  • SLF4J-简单
  • jboss-logging //没有它就没用了
在你的log4j2.xml

<Logger name="org.hibernate" additivity="false" level="error"/>

maven POM:

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>2.5</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.11.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.11.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.2.0.Final</version>
    </dependency>

答案 2 :(得分:0)

我的情况非常相似,在我的应用程序启动过程中创建EntityManagerFactory时,我试图找到一种方法来禁用Hibernate的日志记录。在我看来,我在StackOverflow上找到的答案都没有。我正在使用Hibernate 5.2.10.Final,它使用jboss-logging-3.3.0.Final。

我必须通过获取&#34;空命名&#34;来禁止所有日志消息的极端措施或黑客攻击。 java.util.logging.Logger并将其级别设置为java.util.logging.Level.SEVERE因此:

private void disableLogging() {
  LogManager logManager = LogManager.getLogManager();
  Logger logger = logManager.getLogger("");
  logger.setLevel(Level.SEVERE); //could be Level.OFF
}

但是,由于这是所有Logger的父级,因此这也会影响您正在使用的任何其他Logger。您可能希望之后将等级(后退)设置为另一个等级。