我正在使用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
答案 0 :(得分:72)
重要提示:属性(hibernate配置的一部分,不是日志框架配置的一部分!)
hibernate.show_sql
将日志直接控制到STDOUT,绕过任何日志记录框架(您可以通过缺少的消息输出格式来识别)。如果您使用log4j之类的日志框架,您应该始终将该属性设置为false ,因为它根本不会给您带来任何好处。
这种情况让我感到很长时间,因为在我尝试写一些关于Hibernate的基准测试之前,我从未真正关心它。
答案 1 :(得分:69)
尝试设置更合理的日志记录级别。将日志记录级别设置为info
意味着仅记录info
或更高级别(warn
,error
和fatal
)的日志事件,即{{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
答案 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