关闭hibernate日志记录控制台输出

Jar*_*red 77 java logging hibernate

我正在使用hibernate 3并希望阻止它将所有启动消息转储到控制台.我试着在log4j.properties中注释出stdout行,但没有运气.我在下面粘贴了我的日志文件.此外,我正在使用标准项目结构的eclipse,并在项目文件夹的根目录和bin文件夹中都有一个log4j.properties的副本.

### direct log messages to stdout ###
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.out
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=hibernate.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trac5

use*_*755 75

重要提示:属性(hibernate配置的一部分,不是日志框架配置的一部分!)

hibernate.show_sql
Run Code Online (Sandbox Code Playgroud)

控制日志记录直接到STDOUT绕过任何日志框架(您可以通过消息的缺失输出格式识别).如果您使用log4j之类的日志记录框架,则应始终将该属性设置为false,因为它根本不会给您带来任何好处.

这种情况让我感到很长时间,因为在我试图编写一些关于Hibernate的基准测试之前,我从未真正关心它.

  • 春天:jpa:属性:休眠:show_sql:假 (3认同)
  • 我必须在我的Hibernate(即`hibernate.xml`)配置中设置此属性,而不是我的日志记录配置.谢谢你的指针! (2认同)
  • 在我的 Spring boot 项目中,我将它添加到了一个配置文件 YML conf 文件中。但它没有用,就像这个线程上的其他帖子一样......无论我指定什么,Hibernate 日志都会被写入。它可以在 Logback 配置、应用程序 yaml 文件和 pom.xml 之外的其他地方处理吗? (2认同)
  • 如果您使用带有属性文件的 Spring Boot:`spring.jpa.properties.hibernate.show_sql=false` (2认同)

Juh*_*älä 73

尝试设置更合理的日志记录级别.将日志记录级别设置为info仅记录处于info或更高级别(warn,errorfatal)的debug日志事件,即忽略日志记录事件.

log4j.logger.org.hibernate=info
Run Code Online (Sandbox Code Playgroud)

或者在log4j配置文件的XML版本中:

<logger name="org.hibernate">
  <level value="info"/> 
</logger>
Run Code Online (Sandbox Code Playgroud)

另请参见log4j手册.

  • 后续,因为这从未得到充分解决:Hibernate,即使仍然在4.3.0.Final,有很多硬编码的`System.out.println()`调用. (4认同)
  • 这似乎是合乎逻辑的,但仍然不适合我(Spring 3.0.5,Hibernate 3.5.6,sf4j-log4j bridge).每次我仍然会在Hibernate启动时获得大约100行'INFO'评论.所以这可能对每个人都不起作用. (3认同)

acd*_*ior 30

执行:

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF);
Run Code Online (Sandbox Code Playgroud)

在hibernate初始化之前为我工作.


注意:上面的行将关闭每个日志(Level.OFF).如果你想要不那么严格,你可以使用

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);
Run Code Online (Sandbox Code Playgroud)

这很安静.(或者查看java.util.logging.Level班级以获得更多关卡).

  • 这对我有用:`java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);` (2认同)

小智 16

你可以禁用hibernate的许多输出设置这个hibernate(hb配置)的道具是假的:

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments
Run Code Online (Sandbox Code Playgroud)

但是,如果你想禁用所有的控制台的信息,您必须设置记录水平的FATAL类的NONE org.hibernate像尤哈说.


小智 7

我终于想通了,这是因为Hibernate现在正在使用slf4j log facade,要桥接到log4j,你需要将log4j和slf4j-log4j12 jar放到你的lib中,然后log4j属性将控制Hibernate日志.

我的pom.xml设置如下所示:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.4</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


小智 5

要禁用Hibernate:select日志中的消息,可以将属性设置为HibernateJpaVendorAdapter

<bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false"/>
</bean> 
Run Code Online (Sandbox Code Playgroud)


Mat*_*čík 5

对于那些不想要优雅的解决方案,只是一种快速而肮脏的方式来阻止这些消息的人,这里有一个对我有用的解决方案(我使用 Hibernate 4.3.6 和 Eclipse,上面没有提供答案(或在互联网上找到)有效;既没有 log4j 配置文件,也没有以编程方式设置日志记录级别)

public static void main(String[] args) {
    //magical - do not touch
    @SuppressWarnings("unused")
    org.jboss.logging.Logger logger = org.jboss.logging.Logger.getLogger("org.hibernate");
    java.util.logging.Logger.getLogger("org.hibernate").setLevel(java.util.logging.Level.WARNING); //or whatever level you need

    ...
}
Run Code Online (Sandbox Code Playgroud)

我在从该网站下载的教程程序中使用了它