我正在使用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
user1050755.. 75
重要提示:属性(hibernate配置的一部分,不是日志框架配置的一部分!)
hibernate.show_sql
控制日志记录直接到STDOUT绕过任何日志框架(您可以通过消息的缺失输出格式识别).如果您使用log4j之类的日志记录框架,则应始终将该属性设置为false,因为它根本不会给您带来任何好处.
这种情况让我感到很长时间,因为在我试图编写一些关于Hibernate的基准测试之前,我从未真正关心它.
重要提示:属性(hibernate配置的一部分,不是日志框架配置的一部分!)
hibernate.show_sql
控制日志记录直接到STDOUT绕过任何日志框架(您可以通过消息的缺失输出格式识别).如果您使用log4j之类的日志记录框架,则应始终将该属性设置为false,因为它根本不会给您带来任何好处.
这种情况让我感到很长时间,因为在我试图编写一些关于Hibernate的基准测试之前,我从未真正关心它.
尝试设置更合理的日志记录级别.将日志记录级别设置为info
仅记录处于info
或更高级别(warn
,error
和fatal
)的debug
日志事件,即忽略日志记录事件.
log4j.logger.org.hibernate=info
或者在log4j配置文件的XML版本中:
另请参见log4j手册.
执行:
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
班级以获得更多关卡).
你可以禁用hibernate的许多输出设置这个hibernate(hb配置)的道具是假的:
hibernate.show_sql hibernate.generate_statistics hibernate.use_sql_comments
但是,如果你想禁用所有的控制台的信息,您必须设置记录水平的FATAL类的NONE org.hibernate
像尤哈说.
我终于想通了,这是因为Hibernate现在正在使用slf4j log facade,要桥接到log4j,你需要将log4j和slf4j-log4j12 jar放到你的lib中,然后log4j属性将控制Hibernate日志.
我的pom.xml设置如下所示:
log4j log4j 1.2.16 org.slf4j slf4j-log4j12 1.6.4