如何通过Logback配置MongoDB连接打开日志的级别?
解决MongoDB驱动连接打开日志级别不生效问题
问题说明
你已将MongoDB驱动的日志配置为DEBUG级别,但连接打开日志仍以INFO级别输出,仅连接关闭日志正常显示DEBUG级别。当前配置如下:
logging: level: root: info org.mongodb.driver.connection: debug
实际日志输出:
- 连接打开(INFO级别):
[LOGGG] INFO [MaintenanceTimer-1-thread-1][AnonymousUser] [] org.mongodb.driver.connection: Opened connection [connectionId{localValue:12, serverValue:1403}] to localhost:27017 - 连接关闭(DEBUG级别):
2023-05-19 15:21:07,317 [LOGGG] DEBUG [SpringApplicationShutdownHook][AnonymousUser] [] org.mongodb.driver.connection: Closing connection connectionId{localValue:10, serverValue:1673}
根源分析
MongoDB Java驱动中,Opened connection这条日志是硬编码为INFO级别的,而Closing connection是DEBUG级别。你配置的org.mongodb.driver.connection: debug是日志框架的输出阈值(允许DEBUG及以上级别日志输出),因此INFO级的连接打开日志仍会正常显示,这符合日志框架的规则。
解决方案
根据你的需求选择对应方法:
需求1:隐藏连接打开的INFO日志,仅保留DEBUG级日志
在Logback配置文件(如logback-spring.xml/logback.xml)中添加过滤规则,拒绝特定的INFO级日志:
<logger name="org.mongodb.driver.connection" level="DEBUG"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator> <expression>message.contains("Opened connection")</expression> </evaluator> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> </logger>
注意:如果使用Spring Boot的
application.yml直接将该包级别设为WARN,会同时隐藏DEBUG级的连接关闭日志,不推荐。
需求2:将连接打开的日志转为DEBUG级别输出
由于日志级别是驱动硬编码的,需通过自定义Logback转换器实现:
- 编写自定义转换器类:
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.pattern.CompositeConverter; public class MongoConnectionLogLevelConverter extends CompositeConverter<ILoggingEvent> { @Override protected String transform(ILoggingEvent event, String in) { if ("org.mongodb.driver.connection".equals(event.getLoggerName()) && event.getLevel() == Level.INFO && event.getMessage().contains("Opened connection")) { event.setLevel(Level.DEBUG); } return in; } }
- 在Logback配置文件中注册并使用该转换器:
<configuration> <conversionRule conversionWord="level" converterClass="com.yourpackage.MongoConnectionLogLevelConverter"/> <!-- 保留原有日志配置 --> <logger name="org.mongodb.driver.connection" level="DEBUG"/> <!-- 其他日志配置项 --> </configuration>
内容的提问来源于stack exchange,提问作者Arsen Ilchyniak
相关产品推荐
相关产品推荐

