2

我对 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

我如何找出是谁在制造这些信息,以及如何让他闭嘴?

4

1 回答 1

2

并非每个 Java 软件都使用 log4j。

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

于 2012-12-12T19:53:11.087 回答