【发布时间】:2012-12-12 17:48:53
【问题描述】:
我的 log4j 或 Spring 或 H2 配置有问题。我似乎找不到罪魁祸首。我的问题是,虽然 log4j 的日志记录配置非常严格,但我仍然会从系统中的某些组件中获得不需要的日志。
我使用 Spring Framework 和 Hibernate 来访问 H2 数据库。这三个中的一个生成的日志似乎直接打印到System.out。
我的日志输出:
12-12 18:41:08 jdbc[2]:
/*SQL */SET DB_CLOSE_DELAY -1;
12-12 18:41:08 jdbc[2]:
/**/Connection conn1 = DriverManager.getConnection("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT= 2", "", "");
12-12 18:41:08 jdbc[2]:
/*SQL #:1*/CALL LOCK_MODE();
12-12 18:41:08 database: disconnecting session #2
[main] WARN org.hibernate.internal.util.xml.DTDEntityResolver - HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
如您所见,唯一正确的记录器行是最后一行。我的 log4j 配置是这样的:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=INFO, A1
log4j.logger.org.hibernate=WARN
log4j.logger.org.springframework=WARN
log4j.logger.org.h2=WARN
log4j.logger.org.java.sql=WARN
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
我如何找出是谁在制造这些信息,以及如何让他闭嘴?
【问题讨论】:
-
你检查过这个H2 logging information吗?
-
顺便说一句,你的标题给了我相反的印象:你不能记录消息,所以我冒昧地改变了它,但你可以调整它。
-
非常感谢。我使用了 slf4j 并在 jdbc-URL 中设置了 TRACE_LEVEL_FILE=4,现在它可以工作了。
-
我知道 Spring 和 Hibernate 与 log4j 配合得很好,因此我怀疑是 H2。由于我们找到了罪魁祸首,我添加了一个答案。
标签: java spring hibernate log4j h2