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

时间:2015-05-09 08:05:44

标签: java mongodb logging

我正在尝试禁用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日志,我无法读取任何内容。

11 个答案:

答案 0 :(得分:13)

要使这部分代码正常工作,您需要 Logback 。 (如果是maven项目)

\n

然后,如果您只想禁用Mongo驱动程序日志记录,则应该执行以下操作:

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

再次要明确,以下是此代码的导入列表:

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

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

编辑:这是一个水平设置为ERROR的单线程。

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

答案 1 :(得分: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);

答案 2 :(得分: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设置为更高Level

答案 3 :(得分:3)

如果您使用xml资源配置Logback,可以通过添加以下内容轻松完成:

<logger name="org.mongodb.driver.cluster" level="OFF" />

到你的配置。

答案 4 :(得分:2)

使用以下导入

import java.util.logging.Logger;

在代码中使用以下内容。

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

答案 5 :(得分:2)

我用

解决了这个问题
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.

答案 6 :(得分:1)

对于仍然面临日志记录问题的人,您必须将 org.mongodb.driver 的日志级别设置为更高的值,如WARN或ERROR。 com.mongodb类不再使用了,即使它仍然写在日志中。

请参阅此帖子的最后一个答案:Configure logging for the MongoDB Java driver

答案 7 :(得分:0)

关闭所有记录器:

final LogManager lm = LogManager.getLogManager();
for( final Enumeration<String> i = lm.getLoggerNames(); i.hasMoreElements(); ) {
   lm.getLogger( i.nextElement()).setLevel( Level.OFF );
}

答案 8 :(得分:0)

就我而言,MongoDB driver 3.5.0SLF4j+Log4j12,它已经足够了:

log4j.logger.org.mongodb.driver=OFF

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

答案 9 :(得分:0)

通过“ com.mongodb。客户端 .MongoClient”

导入您的Mongo客户端。
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;

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

public class Quick
{

    public static void main(String[] args)
    {
        Logger.getLogger("org.mongodb.driver").setLevel(Level.WARNING);
        try (MongoClient mongo = MongoClients.create())
        {
            mongo.listDatabaseNames().forEach((Consumer<String>) System.out::println);
        }
    }
}

在编写此答案时,请确保您具有最新版本的驱动程序 3.12.2

<dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.12.2</version>
</dependency>

如果上述方法不起作用,则可能是您使用了其他日志记录模块,请查找如何将其关闭,例如,如果您使用的是 slf4j ,请创建一个名为“ simpleLogger.properties ”,然后在其中添加此行

org.slf4j.simpleLogger.defaultLogLevel = warn

答案 10 :(得分:0)

要禁用 debug 登录到Mongo Driver的Spring Boot应用程序,请在String中设置以下配置,如下所示:

void Main() {
    
    Byte[]   byteArray = new Byte[] { 0x01, 0x02, 0x03, 0x04, 0x05 };
    String[] strArray  = new String[] { "foo", "bar", "baz" };

    OctetFileBuilder ofb = new OctetFileBuilder();
    ofb.ParseFile( byteArray ); // OK, so far so good.

    ofb.ParseFile( strArray ); // Compiler rejects this because `String[]` isn't `Byte[]`. That's also OK.

    IFileBuilder<Byte> fb = ofb;
    fb.ParseFile( byteArray ); // OK

    fb.ParseFile( strArray ); // Compiler error: `String[]` is not `IReadOnlyList<Byte>`.
    
}

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