如何禁用mongoDB Java驱动程序的日志记录?

28

我试图禁用 mongo-java-driver-3.0.0 的日志输出。

我已经尝试在应用程序加载 mongo 驱动程序之前设置它们,但没有帮助。

// Enable MongoDB logging in general
System.setProperty("DEBUG.MONGO", "false");

// Enable DB operation tracing
System.setProperty("DB.TRACE", "false");  

我收到了这样的日志:

11:01:15.406 [pool-1-thread-1] DEBUG org.mongodb.driver.protocol.query - Sending query of namespace susudev.Players on connection [connectionId{localValue:2, serverValue:28}] to server localhost:27017
11:01:15.406 [pool-1-thread-1] DEBUG org.mongodb.driver.protocol.query - Query completed

11:01:25.174 [cluster-ClusterId{value='554dbecb1b554f11e86c3a69', description='null'}-localhost:27017] DEBUG org.mongodb.driver.cluster - Checking status of localhost:27017
11:01:25.177 [cluster-ClusterId{value='554dbecb1b554f11e86c3a69', description='null'}-localhost:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to  {type=STANDALONE, servers=[{address=localhost:27017, type=STANDALONE, roundTripTime=0.6 ms, state=CONNECTED}]

我的控制台被Mongo日志完全填满了,我什么也看不到。


2
你是如何解决这个烦人的问题的?@Candroid - ΦXocę 웃 Пepeúpa ツ
@jipr311 添加了一个新答案。 - itaied
1
有人知道这个输出实际上是什么意思吗?也许你还可以配置集群和连接检查? - BairDev
13个回答

33

如果您正在使用Maven项目,则需要安装Logback才能使此代码部分生效。

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

如果您只想禁用Mongo驱动程序的日志记录,应该这样做:

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger("org.mongodb.driver");
rootLogger.setLevel(Level.OFF);

再次明确,这是使此代码正常工作所需的导入列表:

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import org.slf4j.LoggerFactory;

这个解决方案适用于mongo java驱动程序3.0.0和^。

编辑:这是一个将级别设置为ERROR的单行代码。

((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger("org.mongodb.driver").setLevel(Level.ERROR);

你救了我的一天。我尝试了所有的方法,这是唯一有效的解决方案。 - Geoffrey
build.gradle 中删除 implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.8.0-beta2' 对我很有帮助。 - Polv
我认为这里的魔法是.getLogger("org.mongodb.driver")。这似乎没有在任何地方记录。感谢指针。 - barrypicker

8
如果您需要动态的方式,可以迭代所有日志记录器并设置它们的级别,或者手动设置级别。以下是mongo驱动程序的日志记录器:
LogManager.getLogger("org.mongodb.driver.connection").setLevel(org.apache.log4j.Level.OFF);
LogManager.getLogger("org.mongodb.driver.management").setLevel(org.apache.log4j.Level.OFF);
LogManager.getLogger("org.mongodb.driver.cluster").setLevel(org.apache.log4j.Level.OFF);
LogManager.getLogger("org.mongodb.driver.protocol.insert").setLevel(org.apache.log4j.Level.OFF);
LogManager.getLogger("org.mongodb.driver.protocol.query").setLevel(org.apache.log4j.Level.OFF);
LogManager.getLogger("org.mongodb.driver.protocol.update").setLevel(org.apache.log4j.Level.OFF);

1
我正在使用log4j,并通过设置log4j属性完成了它:props.setProperty(“log4j.logger.org.mongodb.driver”,“WARN”); - Avinash Sahu

7
所以这解决了这个问题:
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;

...

static Logger root = (Logger) LoggerFactory
        .getLogger(Logger.ROOT_LOGGER_NAME);

static {
    root.setLevel(Level.INFO);
}

如果你希望隐藏所有日志,可以将 Level 设置为更高的级别。


我不明白,那是log4j还是slf4j? ch.qos.logback.classic.Level; 是从哪里来的? - ΦXocę 웃 Пepeúpa ツ
logback库和slf4j - itaied

6
如果您使用XML资源来配置Logback,您可以通过添加以下内容轻松完成:<logger name="org.mongodb.driver.cluster" level="OFF" />到您的配置中。

6

我用以下方式解决了问题:

import java.util.logging.Logger;
import java.util.logging.Level;

Logger mongoLogger = Logger.getLogger( "org.mongodb.driver" );
mongoLogger.setLevel(Level.SEVERE); // e.g. or Log.WARNING, etc.

对我有用 -- 驱动程序 3.8.1 - Rafael Santos

3
为了禁用Mongo Driver在spring boot应用程序中的调试日志记录,需在logback-spring.xml文件中设置以下配置:

<logger name="org.mongodb" level="WARN" />

这将禁用控制台记录器以及在配置文件 logback-spring.xml 中定义的其他记录器。


2

对于那些仍然遇到日志问题的人,您需要将org.mongodb.driver的日志级别设置为更高的级别,例如WARN或ERROR。即使在日志中仍然写有com.mongodb类,但它已不再使用。

请参见此帖子的最后一个答案:配置MongoDB Java驱动程序的日志记录


2

使用以下导入

import java.util.logging.Logger;

在代码中使用以下内容。

Logger mongoLogger = Logger.getLogger( "com.mongodb" );
mongoLogger.setLevel(Level.SEVERE);

1
在我的情况下,使用 MongoDB 驱动程序 3.5.0SLF4j+Log4j12,只需添加以下内容即可满足需求:
log4j.logger.org.mongodb.driver=OFF

在我的 Log4j .properties 配置文件中。

1

使用Spring Boot,在application.yaml中(也可以将其设置为OFF):

logging:
  level:
    org:
      mongodb:
        driver: WARN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接