配置MongoDB Java驱动程序的日志记录

时间:2012-03-03 10:27:29

标签: java mongodb logging

我是否可以配置MongoDB Java驱动程序以输出有用的(用于调试)消息,理想情况下使用标准日志框架之一?我主要感兴趣的是看到每个查询结果,收到了多少数据以及花了多长时间,以及任何错误代码。

7 个答案:

答案 0 :(得分:22)

在加载任何MongoDB Java驱动程序类之前,您需要设置几个系统属性

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

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

执行此操作后,驱动程序将使用the standard Java logging framework来记录消息。

不幸的是,据我所知,从Java驱动程序代码来看,日志记录粒度并不是那么好 - 例如,您无法有选择地记录特定集合上的操作。

答案 1 :(得分:19)

任何人仍然面临新版mongodb驱动程序3.x的问题?

log4j.properties

中为mongo驱动程序包定义记录器
log4j.logger.org.mongodb.driver=INFO

com.mongodb 已更改为 org.mongodb

答案 2 :(得分:16)

另一种设置MongoDB日志级别的方法:

import java.util.logging.Logger;
Logger mongoLogger = Logger.getLogger( "com.mongodb" );
mongoLogger.setLevel(Level.SEVERE); // e.g. or Log.WARNING, etc.

在使用任何驱动程序类之前不必执行此操作,您可以随时设置/更改日志级别。

答案 3 :(得分:7)

以下系列适用于我,

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.

答案 4 :(得分:0)

从3.11 beta2开始,这对我有用

import com.mongodb.diagnostics.logging.Loggers;

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


Logger.getLogger(Loggers.PREFIX).setLevel(Level.SEVERE);

答案 5 :(得分:0)

要使用3.6 MongoDB Java驱动程序或更高版本记录所有查询:

  1. 确保您使用的是slf4j

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.29</version>
    </dependency>
    

    或者如果您使用的是log4j2

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.13.0</version>
    </dependency>
    
  2. org.mongodb.driver的日志记录级别设置为DEBUG

    因此对于log4j2,您需要向xml配置文件中添加类似的内容

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

按照其他答案中的建议将日志级别设置为INFO或SEVERE级别对我不起作用。根据{{​​3}},如果slf4j不存在,则

  

驱动程序将退回到JUL(java.util.logging)

这是大多数其他答案使用的,因此也许使用了不同的日志级别(尽管我无法想象是这种情况)

答案 6 :(得分:0)

Mongodb团队提供了一种解决方案(https://mongodb.github.io/mongo-java-driver/3.11/driver/reference/monitoring/)。

我们可以实现ConnectionPoolListener并在创建MongoClient时加入。

例如(使用log4j):

public class ConnectionPoolListenerMongoDb implements ConnectionPoolListener {
private static final Logger logger = Logger.getLogger(StatisticsDaoImpl.class);

@Override
public void connectionPoolOpened(ConnectionPoolOpenedEvent connectionPoolOpenedEvent) {
    logger.info(connectionPoolOpenedEvent.toString());
}

@Override
public void connectionPoolClosed(ConnectionPoolClosedEvent connectionPoolClosedEvent) {
    logger.info(connectionPoolClosedEvent.toString());
}

@Override
public void connectionCheckedOut(ConnectionCheckedOutEvent connectionCheckedOutEvent) {
    logger.info(connectionCheckedOutEvent.toString());
}

@Override
public void connectionCheckedIn(ConnectionCheckedInEvent connectionCheckedInEvent) {
    logger.info(connectionCheckedInEvent.toString());
}

@Override
public void waitQueueEntered(ConnectionPoolWaitQueueEnteredEvent connectionPoolWaitQueueEnteredEvent) {
    logger.info(connectionPoolWaitQueueEnteredEvent.toString());
}

@Override
public void waitQueueExited(ConnectionPoolWaitQueueExitedEvent connectionPoolWaitQueueExitedEvent) {
    logger.info(connectionPoolWaitQueueExitedEvent.toString());
}

@Override
public void connectionAdded(ConnectionAddedEvent connectionAddedEvent) {
    logger.info(connectionAddedEvent.toString());
}

@Override
public void connectionRemoved(ConnectionRemovedEvent connectionRemovedEvent) {
    logger.info(connectionRemovedEvent.toString());
}
}

设置:

    private MongoClientSettings getMongoClientSettings() throws IOException {
    return MongoClientSettings.builder()
                    .applyToConnectionPoolSettings(new Block<ConnectionPoolSettings.Builder>() {
                        @Override
                        public void apply(ConnectionPoolSettings.Builder builder) {
                            builder.addConnectionPoolListener(new ConnectionPoolListenerMongoDb());
                        }
                    })
                    .applyConnectionString(new ConnectionString(Settings.getMongoSettings()))
                    .build();
}

创作:

MongoClientSettings settings = getMongoClientSettings();
        mongoClient = MongoClients.create(settings);