使用Spring Boot记录MongoDB查询

Fab*_*ner 7 mongodb spring-boot

是否可以在Spring Boot应用程序中记录所有MongoDB查询?我试过这个:

logging.level.org.springframework.data.document.mongodb=INFO
log4j.category.org.springframework.data.document.mongodb=INFO
Run Code Online (Sandbox Code Playgroud)

但它没有用.

Moj*_*bye 13

试试这个:

只需将此行添加到application.propertiese文件中,并在运行任何org.springframework.data.mongodb.core.MongoTemplate查询后检查控制台输出.

logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
Run Code Online (Sandbox Code Playgroud)

日志将是:

2018-11-26 19:23:16.574 DEBUG 15668 --- [nio-8081-exec-2]
osdata.mongodb.core.MongoTemplate:find using query:{"status":"ACTIVE","item._id" :{"$ oid":"5bfbcde45ac3366ad70cdb9f"}}字段:文档{{}}


Kih*_*ats 11

这种方法有点长,但它解决了更多.我们将使用一个名为Spring Boot Admin Server的工具.

  1. 首先,您需要包含一些依赖项

    <!--Dependency for registering your app as a Spring Boot Admin Server-->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-server</artifactId>
        <version>1.3.3</version>
    </dependency>
    
    <!--Provide a nice looking ui-->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-server-ui</artifactId>
        <version>1.3.3</version>
    </dependency>
    
    <!--Dependency for registering your app as a Spring Boot Admin Client-->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>1.3.0</version>
    </dependency>
    <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
    </dependency>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用注释使您的应用成为Spring Boot Admin Server @EnableAdminServer.

    @SpringBootApplication
    @EnableAdminServer
    public class Application {
       public static void main(String[] args) {
          // ... your code as before ...
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您application.properties添加以下内容:

    将您的应用程序注册到Spring Boot Admin Server,它仍然是您的应用程序

    spring.boot.admin.url=http://localhost:8031
    
    Run Code Online (Sandbox Code Playgroud)

    指示Spring Boot Admin Server在哪里可以找到客户端

    spring.boot.admin.client.service-url=http://localhost:8031
    spring.boot.admin.client.management-url=http://localhost:8031
    spring.boot.admin.client.health-url=http://localhost:8031/health
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在您logback.xml刚刚添加以下行<jmxConfigurator/>.这允许通过JMX配置logback.更多信息在这里

...... 瞧,你已经完成了.现在,您可以在运行时更改任何记录器的调试级别.

一世.只需访问Spring Boot Admin Server的URL(在我们的例子中http:/localhost:8031)().

II.注册的应用程序(客户端)列表将显示在主页上.

III.单击Details已注册的客户端,将转到另一个页面.

IV.单击Logging选项卡,其中将列出应用程序中注册的所有记录器.

v.您可以更改日志级别,它将在运行时更改日志记录级别.这是你期望的片段

在运行时更改日志记录级别

要回答您的问题,如果您想查看MongoDB查询,只需查找MongoTemplate并更改日志记录级别即可DEBUG.

对于Spring Boot Admin的版本2.*.*,请使用以下配置:

spring.boot.admin.client.url=http://localhost:8031
Run Code Online (Sandbox Code Playgroud)

  • 嗨downvoter,请与stackoverflow社区分享为什么你投票.它可以帮助改善答案. (4认同)

RJ.*_*ang 6

如果使用spring boot react mongodb,请设置 org.springframework.data.mongodb.core.ReactiveMongoTemplate=DEBUG


小智 5

我是 Spring 框架的新手,但我将这两个条目添加到应用程序配置文件中

logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
logging.level.org.springframework.data.mongodb.core.ReactiveMongoTemplate=DEBUG
Run Code Online (Sandbox Code Playgroud)

没有查询记录到控制台。

之后,我为应用程序启用了 DEBUG 级别,并在日志输出中查找查询的日志条目。

2022-09-15 08:55:26.945 DEBUG 4388 --- [           main] 
org.mongodb.driver.protocol.command      : Sending command '{ "find" : "movies", 
"filter" : { "countries" : { "$all" : ["Russia", "Japan"] } },
Run Code Online (Sandbox Code Playgroud)

因此,我将应用程序日志级别反转回 INFO,并为 org.mongodb.driver.protocol.command 命名空间启用 DEBUG 级别。

logging.level.org.mongodb.driver.protocol.command=DEBUG
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。