如何使用 mongo java 驱动程序将实际查询记录到 MongoDB
How can I log actual queries to MongoDB with mongo java driver
我想查看 mongo java 驱动程序生成的查询,但我做不到。
使用 official documentation 中的信息,我只能在日志中看到执行更新操作,但我没有看到此操作的查询。
您可以将 org.mongodb
的记录器级别设置为 DEBUG
,您的 Java 驱动程序将发出如下详细的日志记录:
2018-01-18 16:51:07|[main]|[NA]|INFO |org.mongodb.driver.connection|Opened connection [connectionId{localValue:2, serverValue:39}] to localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Inserting 1 documents into namespace Whosebug.sample on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Insert completed
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Sending command {find : BsonString{value='sample'}} to database Whosebug on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Command execution completed
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Sending command {findandmodify : BsonString{value='sample'}} to database Whosebug on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Command execution completed
在上面的日志输出中,您可以看到客户端提交的查询的详细信息:
org.mongodb.driver.protocol.command|Sending command {find : BsonString{value='sample'}}
或者,您可以在服务器端启用 profiling ...
db.setProfilingLevel(2)
... 导致 MongoDB 探查器收集针对该数据库的 所有 操作的数据。
分析器输出(包括客户端提交的查询)被写入已启用数据库分析的 system.profile
集合。
the docs 中有更多详细信息,但简短摘要是:
// turn up the logging
db.setProfilingLevel(2)
// ... run some commands
// find all profiler documents, most recent first
db.system.profile.find().sort( { ts : -1 } )
// turn down the logging
db.setProfilingLevel(0)
如果您使用的是 Spring Boot 1.5.x(我使用的是 1.5.19),您需要将 org.mongodb:mongodb-driver
的版本至少覆盖到 version 3.7.0 在日志中获取附加信息。
查看此票以了解更多详情:https://jira.mongodb.org/browse/JAVA-2698
我想查看 mongo java 驱动程序生成的查询,但我做不到。
使用 official documentation 中的信息,我只能在日志中看到执行更新操作,但我没有看到此操作的查询。
您可以将 org.mongodb
的记录器级别设置为 DEBUG
,您的 Java 驱动程序将发出如下详细的日志记录:
2018-01-18 16:51:07|[main]|[NA]|INFO |org.mongodb.driver.connection|Opened connection [connectionId{localValue:2, serverValue:39}] to localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Inserting 1 documents into namespace Whosebug.sample on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Insert completed
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Sending command {find : BsonString{value='sample'}} to database Whosebug on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Command execution completed
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Sending command {findandmodify : BsonString{value='sample'}} to database Whosebug on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Command execution completed
在上面的日志输出中,您可以看到客户端提交的查询的详细信息:
org.mongodb.driver.protocol.command|Sending command {find : BsonString{value='sample'}}
或者,您可以在服务器端启用 profiling ...
db.setProfilingLevel(2)
... 导致 MongoDB 探查器收集针对该数据库的 所有 操作的数据。
分析器输出(包括客户端提交的查询)被写入已启用数据库分析的 system.profile
集合。
the docs 中有更多详细信息,但简短摘要是:
// turn up the logging
db.setProfilingLevel(2)
// ... run some commands
// find all profiler documents, most recent first
db.system.profile.find().sort( { ts : -1 } )
// turn down the logging
db.setProfilingLevel(0)
如果您使用的是 Spring Boot 1.5.x(我使用的是 1.5.19),您需要将 org.mongodb:mongodb-driver
的版本至少覆盖到 version 3.7.0 在日志中获取附加信息。
查看此票以了解更多详情:https://jira.mongodb.org/browse/JAVA-2698