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

Thi*_*ilo 29 java logging mongodb

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

thk*_*ala 23

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

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

// Enable DB operation tracing
System.setProperty("DB.TRACE", "true");
Run Code Online (Sandbox Code Playgroud)

执行此操作后,驱动程序将使用标准Java日志记录框架来记录消息.

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

  • 想知道是否有人尝试在Scala中使用SLF4J日志API访问带有casbah的java驱动程序?在不使用JUL时,似乎无法将消息记录到我的日志记录框架中. (2认同)
  • 我正在使用 mongodb-spring 数据,但这不起作用,我没有得到任何日志记录... (2认同)

AsS*_*iDe 22

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

log4j.properties中为mongo驱动程序包定义一个记录器

log4j.logger.org.mongodb.driver=INFO
Run Code Online (Sandbox Code Playgroud)

com.mongodb已更改为org.mongodb.

  • 我在我的 log4j.properties 中添加了这个,当我执行查询时没有任何反应......除了我添加的自定义日志消息之外,我没有看到任何日志记录...... (2认同)

eri*_*oco 16

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

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

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

  • 试过但不适合我.在mongo初始化之后需要调用吗? (4认同)
  • 使用logger的包名称会更好.是JUL吗?SLF4J? (2认同)
  • 如果您为Mongodriver 3.x或更高版本使用org.mongodb而不是com.mongodb,这是正确的. (2认同)

小智 8

以下系列适用于我,

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.
Run Code Online (Sandbox Code Playgroud)


THe*_*per 5

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

  1. 确保您使用的是 slf4j

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.29</version>
    </dependency>
    
    Run Code Online (Sandbox Code Playgroud)

    或者如果您使用的是 log4j2

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.13.0</version>
    </dependency>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将日志记录级别设置org.mongodb.driverDEBUG

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

    <logger name="org.mongodb.driver" level="DEBUG"></logger>
    
    Run Code Online (Sandbox Code Playgroud)

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

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

这是大多数其他答案使用的,所以也许使用不同的日志级别(虽然我无法想象是这样的情况)