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
或更高级别( warn
, error
和fatal
)的日志事件,即忽略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