Java 控制休眠日志记录

Java 控制休眠日志记录,java,hibernate,logging,log4j,Java,Hibernate,Logging,Log4j,我使用hibernate在jboss容器中运行了一个应用程序。然而,我在hibernate所做的日志记录方面遇到了问题。当Hibernate初始化时,我会收到以下启动消息: 2010-01-08 17:23:42,017 INFO [Configuration:1403] - Configuration resource: /hibernate.cfg.xml 2010-01-08 17:23:42,070 INFO [Configuration:1541] - Configured Ses

我使用hibernate在jboss容器中运行了一个应用程序。然而,我在hibernate所做的日志记录方面遇到了问题。当Hibernate初始化时,我会收到以下启动消息:

2010-01-08 17:23:42,017 INFO  [Configuration:1403] - Configuration resource: /hibernate.cfg.xml
2010-01-08 17:23:42,070 INFO  [Configuration:1541] - Configured SessionFactory: null
等等。不过,我想把它们处理掉,因为它们是无用的信息。我的log4j.properties中有以下配置:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%c{1}:%L] - %m%n

log4j.rootCategory = error, stdout

# Hibernate
log4j.logger.org.hibernate=error
log4j.logger.org.hibernate.tool.hbm2ddl=fatal
正如您所看到的,日志记录确实与我的转换模式中指定的格式匹配。然而,我仍然收到信息消息。我也在使用:

这确实可以正常工作,因为我只会收到错误:

2010-01-08 17:31:46,948 ERROR [AgiConnectionHandler:156] - AgiException running AgiScript com.**** on Asterisk-Java DaemonPool-1-thread-2 org.asteriskjava.fastagi.AgiException: Number is on blacklist
所以我现在有点困惑

更新

在运行带有

-Dlog4j.debug
我得到:

log4j: Reading configuration from URL jar:file:*******.jar!/log4j.properties
log4j: Parsing for [root] with value=[error, stdout].
log4j: Level token is [error].
log4j: Category root set to ERROR
log4j: Parsing appender named "stdout".
log4j: Parsing layout options for "stdout".
log4j: Setting property [conversionPattern] to [%d %-5p [%c{1}:%L] - %m%n].
log4j: End of parsing for "stdout".
log4j: Parsed "stdout" options.
log4j: Parsing for [org.hibernate.tool.hbm2ddl] with value=[error].
log4j: Level token is [error].
log4j: Category org.hibernate.tool.hbm2ddl set to ERROR
log4j: Handling log4j.additivity.org.hibernate.tool.hbm2ddl=[null]
log4j: Parsing for [org.hibernate] with value=[fatal].
log4j: Level token is [fatal].
log4j: Category org.hibernate set to FATAL
log4j: Handling log4j.additivity.org.hibernate=[null]
log4j: Parsing for [org.asteriskjava] with value=[error].
log4j: Level token is [error].
log4j: Category org.asteriskjava set to ERROR
log4j: Handling log4j.additivity.org.asteriskjava=[null]
log4j: Finished configuring.
没有加载任何其他文件。所以我想知道为什么它不起作用。在创建会话工厂之前,我还尝试了以下操作:

Logger.getLogger("org.hibernate").setLevel(Level.ERROR);

也没有成功…

听起来像是某个地方的另一个日志配置正在覆盖您的日志配置。您可能希望尝试将系统变量
-Dlog4j.debug
添加到容器的启动路径,以便log4j将打印出其调试信息,这将准确地告诉您它正在使用哪个文件来配置自身。有可能正在使用类路径上的另一个文件而不是您的文件

另外,您确实不应该在任何类型的生产环境中使用%L-:

%L:
用于输出发出日志记录请求的行号。
警告生成呼叫者位置信息的速度非常慢。除非执行速度不是问题,否则应该避免使用它


听起来好像其他地方的日志配置可能会覆盖您的日志配置。您可能希望尝试将系统变量
-Dlog4j.debug
添加到容器的启动路径,以便log4j将打印出其调试信息,这将准确地告诉您它正在使用哪个文件来配置自身。有可能正在使用类路径上的另一个文件而不是您的文件

另外,您确实不应该在任何类型的生产环境中使用%L-:

%L:
用于输出发出日志记录请求的行号。
警告生成呼叫者位置信息的速度非常慢。除非执行速度不是问题,否则应该避免使用它


我对此有些想法是的,我会试试你的建议。我知道%L问题,我有单独的生产/开发文件。我对此有一些想法。是的,我会尝试你的建议。我知道%L问题,我有单独的生产/开发文件
Logger.getLogger("org.hibernate").setLevel(Level.ERROR);