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

我试过:

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

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


当前回答

一旦使用db.setProfilingLevel(2)设置了分析级别。

下面的命令将打印最后执行的查询。 您也可以更改限制(5)以查看更少/更多的查询。 $nin -过滤概要文件和索引查询 此外,使用查询投影{'query':1}仅用于查看查询字段

db.system.profile.find(
{ 
    ns: { 
        $nin : ['meteor.system.profile','meteor.system.indexes']
    }
} 
).limit(5).sort( { ts : -1 } ).pretty()

只有查询投影的日志

db.system.profile.find(
{ 
    ns: { 
        $nin : ['meteor.system.profile','meteor.system.indexes']
    }
},
{'query':1}
).limit(5).sort( { ts : -1 } ).pretty()

其他回答

您可以记录所有查询:

$ mongo
MongoDB shell version: 2.4.9
connecting to: test
> use myDb
switched to db myDb
> db.getProfilingLevel()
0
> db.setProfilingLevel(2)
{ "was" : 0, "slowms" : 1, "ok" : 1 }
> db.getProfilingLevel()
2
> db.system.profile.find().pretty()

来源:http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/

db.setProfilingLevel(2)表示“记录所有操作”。

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

因为它的谷歌第一个答案… 对于版本3

$ mongo
MongoDB shell version: 3.0.2
connecting to: test
> use myDb
switched to db
> db.setLogLevel(1)

http://docs.mongodb.org/manual/reference/method/db.setLogLevel/

db.adminCommand( { getLog: "*" } )

Then

db.adminCommand( { getLog : "global" } )

我最终通过像这样开始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