【问题标题】:Unwanted JDBC messages ignore log4j configuration不需要的 JDBC 消息忽略 log4j 配置
【发布时间】: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


【解决方案1】:

并非所有 Java 软件都使用 log4j。

在这种情况下,H2 生成可以使用 slf4j 控制的跟踪,如 “使用其他日志记录 API”部分中的 their documentation 中所述

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2011-07-27
    • 2012-09-18
    • 2014-01-19
    相关资源
    最近更新 更多