【问题标题】:Hibernate System.err console loggingHibernate System.err 控制台日志记录
【发布时间】:2013-09-03 16:06:42
【问题描述】:

Hibernate 似乎正在将正常信息记录到System.err。举几个例子:

System.err: Sep 03, 2013 10:41:55 AM org.hibernate.annotations.common.Version <clinit>
System.err: Sep 03, 2013 10:41:55 AM org.hibernate.Version logVersion
System.err: Sep 03, 2013 10:41:55 AM org.hibernate.cfg.Environment <clinit>
System.err: Sep 03, 2013 10:41:55 AM org.hibernate.cfg.Environment buildBytecodeProvider
System.err: Sep 03, 2013 10:42:02 AM org.hibernate.tool.hbm2ddl.TableMetadata <init>

总共大约有 70 个。我的日志设置如下:

log4j-over-slf4j.jar
slf4j-api.jar
slf4j-simple-1.7.5.jar

我知道 slf4j-simple,per the SLF4J Manual"outputs all events to System.err. Only messages of level INFO and higher are printed."

知道了这一点,我将org.slf4j.simpleLogger.logFile 系统属性设置为System.outspecified in the SimpleLogger docs

但是,这并没有改变任何行为,我仍然收到 70 多个 Hibernate System.err 日志。

有什么方法可以将 Hibernate 配置为不输出到System.err?问题是这些 System.err 消息被解释为 WARN,而它们只是信息性消息。

【问题讨论】:

  • 真的设置属性吗?
  • 据我所知,是的。我在未设置属性(默认为 System.err)时进行了一些测试,并且收到了更多已输出到 System.err 的日志。设置属性后,这些日志语句消失了,但 Hibernate 仍然存在。

标签: java hibernate slf4j


【解决方案1】:

现在 Hibernate 4.x 使用 JBoss 进行日志记录,这是导致问题的原因。 This thread 帮助最大,解决方法是设置系统属性org.jboss.logging.provider=slf4j

这使 slf4j-simple 能够获取所有 Hibernate System.err 输出。使用原始线程中提到的系统属性,您可以将System.err 输出更改为System.out

【讨论】: