这个问题既简单又基本。如何将所有查询记录在mongodb中的“尾部”日志文件中?

我试过:

设置概要级别 设置启动慢ms参数 使用-vv选项Mongod

/var/log/mongodb/mongodb.log一直显示当前活动连接的数量…


当前回答

db.setProfilingLevel(2,-1)

这个工作!它在mongod日志文件中记录了所有查询信息

其他回答

将profilinglevel设置为2是记录所有查询的另一个选项。

尝试这个包来跟踪所有查询(没有oplog操作):https://www.npmjs.com/package/mongo-tail-queries

(免责声明:我写这个包正是为了这个需要)

我最终通过像这样开始mongod来解决这个问题(锤击和丑陋,是的……但适用于开发环境):

mongod --profile=1 --slowms=1 &

这将启用分析,并将“慢查询”的阈值设置为1毫秒,导致所有查询都被记录为文件的“慢查询”:

/var/log/mongodb/mongodb.log

现在我得到连续的日志输出使用命令:

tail -f /var/log/mongodb/mongodb.log

日志示例:

Mon Mar  4 15:02:55 [conn1] query dendro.quads query: { graph: "u:http://example.org/people" } ntoreturn:0 ntoskip:0 nscanned:6 keyUpdates:0 locks(micros) r:73163 nreturned:6 reslen:9884 88ms

我认为oplog虽然不够优雅,但可以部分地用于这个目的:它记录所有的写操作——但不记录读操作……

如果我没猜错的话,你必须马上启用复制。信息来自这个问题的答案:如何监听MongoDB集合的更改?

我写了一个脚本,将打印出系统。当查询进来时,配置文件实时登录。如其他回答中所述,您需要首先启用日志记录。我需要这个,因为我正在使用Linux的Windows子系统,对于它,tail仍然不起作用。

https://github.com/dtruel/mongo-live-logger