Spring Boot中MongoDB SLF4JLogger日志禁用失效问题求助
问题:MongoDB驱动诊断日志禁用失效
运行Spring Boot应用时会输出以下MongoDB命令日志:
c.m.i.d.l.SLF4JLogger : Command "insert" started on database "test" using a connection with driver-generated ID 3 and server-generated ID 13 to localhost:32795. The request ID is 13 and the operation ID is 11. Command: {"insert": "jobExecution", "ordered": true, "txnNumber": 1, "$db": "test", "$clusterTime": {"clusterTime": {"$timestamp": ...}
其中c.m.i.d.l.SLF4JLogger对应全类名com.mongodb.internal.diagnostics.logging.SLF4JLogger。
尝试通过以下方式禁用日志但均无效:
- 修改log4j2.xml添加配置:
<Logger level="INFO" name="com.mongodb.internal.diagnostics.logging"/> - 在集成测试的
application-test.yml中设置日志级别:debug: false logging: level: com.mongodb.internal.diagnostics.logging: INFO # 无效 org.springframework.data.mongodb.core: INFO # 有效
解决方案
1. 针对正确的日志类别配置级别
这些命令日志并非来自com.mongodb.internal.diagnostics.logging包,而是MongoDB驱动通过命令日志类别输出的,正确的日志类别为org.mongodb.driver.command(部分旧版本驱动用com.mongodb.driver.command),直接针对该类别设置级别即可:
方式一:application-test.yml配置
logging: level: org.mongodb.driver.command: OFF # 完全禁用命令日志 com.mongodb.driver.command: OFF # 兼容不同驱动版本
如果不需要完全禁用,也可以设置为WARN或ERROR级别,只保留重要日志。
方式二:log4j2.xml配置
<Logger level="OFF" name="org.mongodb.driver.command"/> <Logger level="OFF" name="com.mongodb.driver.command"/>
2. 通过MongoDB驱动原生配置控制
部分场景下,驱动会优先读取自身的日志配置属性,可以在配置文件中添加:
spring.data.mongodb: logging: level: OFF
或者直接指定驱动原生配置:
mongodb: driver: logging: command: OFF
3. 检查日志框架桥接依赖
如果项目中存在多个日志框架冲突(比如同时引入SLF4J、Logback和Log4j2),会导致日志配置不生效。确保只保留一套日志实现,比如使用Log4j2时,排除Spring Boot默认的Logback依赖:
<!-- Maven依赖配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
原因说明
之前的配置无效是因为错误地针对日志实现类SLF4JLogger所在的包进行配置,而实际这些命令日志的输出类别是org.mongodb.driver.command,SLF4JLogger只是驱动用来输出日志的工具类,并非日志的分类标识。
内容的提问来源于stack exchange,提问作者NealeU
相关产品推荐
相关产品推荐

