开启查询日志
方法一:执行MongoDB命令
这个命令只能设置单个组件的日志等级,如果想要一次性设置多个组件的日志等级,可以使用下面的方法:
新建 start_log.js, 内容如下
db.adminCommand( {
setParameter: 1,
logComponentVerbosity: {
verbosity: 1,
query: { verbosity: 2 },
storage: {
verbosity: 2,
journal: {
verbosity: 1
}
}
}
} );
执行命令:
如果开启了认证,还需要加上用户和密码信息
./mongo 127.0.0.1:27019/eop_task ./start_log.js
上面例子中的方法,
将全局的日志等级设置成1;
将query的日志等级设置成2;
将storage的日志等级设置成2;
将storage.journal的日志等级设置成1;
恢复原级别:
新建 close_log.js,内容如下:
db.auth("eop","password");
db.adminCommand( {
setParameter:0,
logComponentVerbosity: {
verbosity: 0,
query: {
verbosity: -1
}
}
});
执行命令 ./mongo 127.0.0.1:27019/eop_task ./close_log.js
方法二:写入配置文件
执行这个命令,等同于在配置文件中写入:
systemLog:
verbosity: 1
component:
query:
verbosity: 2
storage:
verbosity: 2
journal:
verbosity: 1
日志轮换
有时候,长时间没有清理日志,日志的数据量会变的很大,这个时候我们可以通过两种方法来对日志进行滚动:
利用日志轮滚的方法,直接在MongoDB的命令行里面输入:
use admin //切换到admin数据库
db.runCommand({logRotate:1})
这种方法采用了命令来切换日志文件,不需要关闭mongodb服务,是一个比较推荐的做法。
当然,如果需要人手工的定期执行这个命令,好像也不够优雅,所以可以配合crontab去做这个事情,每天定时执行一次,达到日志文件轮滚的目的。
查询日志分析
调整日志等级后,在日志文件中会发现如下类似日志
{ aggregate: "zyb_work_task", pipeline: [ { $match: { level: 0 } }, { $match: { $or: [ { "creator.id": 811 }, { assigneeType: 0, assigneeId: 811 }, { assigneeType: 1, assigneeId: { $in: [ 5778 ] } }, { assigneeType: 2, assigneeId: { $in: [ 29295, 28087, 28118 ] } }, { "ccUser.id": 811 }, { subAssigneeList: 811 }, { subCcList: 811 }, { subCreatorList: 811 } ] } }, { $addFields: { currentEmpFocus: { $ifNull: [ "$empFocus.811", 0 ] } } }, { $match: { finishFlag: false } }, { $sort: { currentEmpFocus: -1, createTime: -1 } }, { $limit: 20 } ], cursor: {} }
然后将其复制到js文件中:
find_task_list.js
//认证
db.auth("eop","pass");
// 格式化输出
print(JSON.stringify(
// 执行命令
db.runCommand(
// 直接复制日志中的查询命令
{ aggregate: "zyb_work_task", pipeline: [ { $match: { level: 0 } }, { $match: { $or: [ { "creator.id": 811 }, { assigneeType: 0, assigneeId: 811 }, { assigneeType: 1, assigneeId: { $in: [ 5778 ] } }, { assigneeType: 2, assigneeId: { $in: [ 29295, 28087, 28118 ] } }, { "ccUser.id": 811 }, { subAssigneeList: 811 }, { subCcList: 811 }, { subCreatorList: 811 } ] } }, { $addFields: { currentEmpFocus: { $ifNull: [ "$empFocus.811", 0 ] } } }, { $match: { finishFlag: false } }, { $sort: { currentEmpFocus: -1, createTime: -1 } }, { $limit: 20 } ], cursor: {} }
)
)
);
执行: ./mongo 127.0.0.1:27019/eop_task ./find_task_list.js
此时就可以将应用的查询语句对应的结果显示出来,进行下一步的调试