开启查询日志

开启查询日志

方法一:执行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

此时就可以将应用的查询语句对应的结果显示出来,进行下一步的调试