closureshibernate日志logging控制台输出

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

  ###将日志消息直接输出到标准输出###
 #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

 ###将消息直接传给文件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

 ###设置日志级别 - 更详细的日志logging更改“信息”到“debugging”###

 log4j.rootLogger =警告,标准输出

 #log4j.logger.org.hibernate =信息
 log4j.logger.org.hibernate =debugging

 ###日志HQL查询parsing器活动
 #log4j.logger.org.hibernate.hql.ast.AST =debugging

 ###只loggingSQL
 #log4j.logger.org.hibernate.SQL =debugging

 ###日志JDBC绑定参数###
 log4j.logger.org.hibernate.type =信息
 #log4j.logger.org.hibernate.type =debugging

 ###日志模式导出/更新###
 log4j.logger.org.hibernate.tool.hbm2ddl =debugging

 ###日志HQLparsing树
 #log4j.logger.org.hibernate.hql =debugging

 ###日志caching活动###
 #log4j.logger.org.hibernate.cache =debugging

 ###login交易活动
 #log4j.logger.org.hibernate.transaction =debugging

 ###loginJDBC资源获取
 #log4j.logger.org.hibernate.jdbc =debugging

 ###启用下面的行,如果你想跟踪连接###
使用DriverManagerConnectionProvider时泄漏###
 #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5 

尝试设置更合理的日志logging级别。 将日志logging级别设置为info意味着只logginginfo或更高级别( warnerrorfatal )的日志事件,即忽略debug日志logging事件。

 log4j.logger.org.hibernate=info 

或在log4jconfiguration文件的XML版本中:

 <logger name="org.hibernate"> <level value="info"/> </logger> 

另请参阅log4j手册 。

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

 hibernate.show_sql 

直接控制日志logging直接到STDOUT绕过任何日志框架(您可以通过消息的输出格式化丢失来识别)。 如果你使用log4j这样的日志框架, 你应该总是把这个属性设置为false,因为它根本没有任何好处。

这种情况激怒了我很长一段时间,因为直到我试图写一些关于Hibernate的基准之前,我从来没有真正地关心过它。

执行:

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

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

注意:上面的这行会closures每一个注销( Level.OFF )。 如果你想不那么严格,你可以使用

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

这是沉默的。 (或者检查java.util.logging.Level类更多的级别)。

你可以禁用许多hibernate的输出设置这个hibernate(hbconfiguration)的道具为false:

 hibernate.show_sql hibernate.generate_statistics hibernate.use_sql_comments 

但是,如果你想禁用所有的控制台信息,你必须设置logging器级别没有类的org.hibernate致命,如Juha说。

我终于明白了,这是因为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> 

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

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

对于那些不想要优雅的解决scheme的人来说,只是一种快速和肮脏的方法来阻止这些消息,这里有一个解决scheme,对我来说(我使用Hibernate 4.3.6和Eclipse,没有上面提供的答案(或在互联网上find的)工作;既没有log4jconfiguration文件,也没有编程设置日志logging级别)

 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 ... } 

我用它从这个网站下载的教程程序

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

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

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

我改变了“debugging”到“信息”,它的工作。 这是我做的:

之前:

 log4j.rootLogger=debug, stdout, R 

后:

 log4j.rootLogger=info, stdout, R 

将slf4j-jdk14-xxx.jarreplace为slf4j-log4j12-xxx.jar。 如果你有两个,删除slf4j-jdk14-xxx.jar。 在https://forum.hibernate.org/viewtopic.php?f=1&t=999623find这个解决scheme