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

时间:2008-11-22 15:16:07

标签: java hibernate logging

我正在使用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

14 个答案:

答案 0 :(得分:72)

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

hibernate.show_sql

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

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

答案 1 :(得分:69)

尝试设置更合理的日志记录级别。将日志记录级别设置为info意味着仅记录info或更高级别(warnerrorfatal)的日志事件,即{{1记录事件被忽略。

debug

或在log4j配置文件的XML version中:

log4j.logger.org.hibernate=info

另见log4j manual

答案 2 :(得分:27)

执行:

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF);

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


注意:上面的行将每次注销(Level.OFF)。如果你想要不那么严格,你可以使用

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);

足够沉默。 (或者查看java.util.logging.Level课程了解更多关卡。)

答案 3 :(得分:16)

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

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

但是如果要禁用所有控制台信息,则必须将记录器级别设置为类org.hibernate的非致命类,如Juha所说。

答案 4 :(得分:7)

我终于想通了,这是因为Hibernate现在正在使用slf4j日志,要桥接到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>

答案 5 :(得分:4)

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

<bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false"/>
</bean> 

答案 6 :(得分:2)

对于那些不想要优雅解决方案的人,只是一种快速而又脏的方法来阻止这些消息,这里有一个适合我的解决方案(我使用的是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

    ...
}

我在从this site

下载的教程中使用它

答案 7 :(得分:2)

要做的第一件事是弄清楚实际使用的日志记录框架。

上面的其他作者已经介绍了许多框架。如果您使用的是Logback,则可以通过将此 logback.xml 添加到类路径中来解决问题:

for fn in $jsFiles; do
 BODY=$(echo "$BODY" | sed  's/'$fn'/http://10.122.96.13/'$fn'/g')      
done

更多信息:Logback Manual-Configuration

答案 8 :(得分:1)

将slf4j-jdk14-xxx.jar替换为slf4j-log4j12-xxx.jar。如果两者都有,请删除slf4j-jdk14-xxx.jar。在https://forum.hibernate.org/viewtopic.php?f=1&t=999623

找到此解决方案

答案 9 :(得分:1)

要在控制台中摆脱记录器输出,请尝试此操作。

ch.qos.logback.classic.LoggerContext.LoggerContext loggerContext = (LoggerContext) org.slf4j.LoggerFactory.LoggerFactory.getILoggerFactory();

loggerContext.stop();

这些语句禁用了记录器的所有控制台输出。

答案 10 :(得分:0)

我将“debug”更改为“info”并且它有效。这是我做的:

在:

log4j.rootLogger=debug, stdout, R

后:

log4j.rootLogger=info, stdout, R 

答案 11 :(得分:0)

基于hibernate包的记录器层次结构,您可以控制休眠日志记录的多个部分(有关记录器层次结构here的更多信息)。

    <!-- Log everything in hibernate -->
    <Logger name="org.hibernate" level="info" additivity="false">
      <AppenderRef ref="Console" />
    </Logger>

    <!-- Log SQL statements -->
    <Logger name="org.hibernate.SQL" level="debug" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

    <!-- Log JDBC bind parameters -->
    <Logger name="org.hibernate.type.descriptor.sql" level="trace" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

以上内容摘自here

此外,您可以在配置文件中拥有属性show-sql:true,因为该属性将取代日志记录框架设置。 here的更多内容。

答案 12 :(得分:0)

我设法通过添加这两行来停止

log4j.logger.org.hibernate.orm.deprecation=error

log4j.logger.org.hibernate=error

下面是我的 log4j.properties 的样子,我只留下一些注释行,解释日志级别

# Root logger option
#Level/rules TRACE < DEBUG < INFO < WARN < ERROR < FATAL.
#FATAL: shows messages at a FATAL level only
#ERROR: Shows messages classified as ERROR and FATAL
#WARNING: Shows messages classified as WARNING, ERROR, and FATAL
#INFO: Shows messages classified as INFO, WARNING, ERROR, and FATAL
#DEBUG: Shows messages classified as DEBUG, INFO, WARNING, ERROR, and FATAL
#TRACE : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#ALL : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#OFF : No log messages display


log4j.rootLogger=INFO, file, console

log4j.logger.main=DEBUG
log4j.logger.org.hibernate.orm.deprecation=error
log4j.logger.org.hibernate=error

#######################################
# Direct log messages to a log file
log4j.appender.file.Threshold=ALL
log4j.appender.file.file=logs/MyProgram.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1} - %m%n

# set file size limit
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=50


#############################################
# Direct log messages to System Out
log4j.appender.console.Threshold=INFO
log4j.appender.console.Target=System.out
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1} - %m%n

答案 13 :(得分:0)

要禁用在日志中打印休眠查询,只需将此添加到您的 application.properties

spring.jpa.show-sql=false