java - 不需要的 JDBC 消息会忽略 log4j 配置

标签 java spring hibernate log4j h2

我在 log4j 或 Spring 或 H2 配置方面遇到问题。我似乎找不到罪魁祸首。我的问题是,虽然 log4j 的日志记录配置非常严格,但我仍然从系统中的某些组件获取不需要的日志。

我使用 Spring 框架和 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

我如何找出谁在发出这些消息以及如何让他闭嘴?

最佳答案

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

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

关于java - 不需要的 JDBC 消息会忽略 log4j 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845637/

相关文章:

java - 如何在 Spring Boot 中禁用一项服务的身份验证?

java - 使用 JPA 针对桥接表设置一对多连接

hibernate - postgresql:将 bytea 转换为 bigint

java - 使用 AssertJ 进行测试时从实际对象和预期对象中提取字段

ruby-on-rails - Rails 中是否存在依赖注入(inject)?

java - 在java中识别从RServe发送的字符串值或错误

java - 为什么从 ApplicationContext 检索到的 bean 中的 @Autowire 为 null?

hibernate - JPA规范是否允许引用非主键列?

java - 为什么不使用 switch case 语句?

java - 如何使用 System.nanoTime() 更精确地对事件进行排序