由于mongodb不提供自动按天来输出日志文件的rotate配置。

如果日志文件清理不及时,会导致mongo越来越慢,甚至服务莫名down掉。

下面就我们在实践过程中使用logRotate的解决日志文件切割的方案叙述一下。

首先看一下官方文档对于logRotate的叙述:

 

一、定义(Definition)

logRotate

logRotate命令是一个管理命令,它可以轮转MongoDB日志,以防止单个日志文件占用过多的磁盘空间。

必须对admin database发出logRotate命令,方式如下:

{ logRotate: 1 }

注意:您的mongod实例需要使用--logpath [file]选项运行。

也可以通过将SIGUSR1信号发送到mongod进程来轮转日志。比如mongod的进程ID为2200,则在Linux上发送信号的方法如下:

kill -SIGUSR1 2200

 

二、行为(Behavior)

systemLog.logRotate设置或--logRotate选项规定了logRotate的行为。

当systemLog.logRotate或--logRotate设置为rename时,logRotate通过将当前时间戳附加到文件名来重命名现有日志文件。附加的时间戳格式如下:

<YYYY>-<mm>-<DD> T <HH>-<MM>-<SS>

然后,logRotate创建一个新的日志文件,新文件名与最初由mongod或mongos的systemLog.path设置规定的日志文件名相同。

将systemLog.logRotate或--logRotate设置为reopen时,logRotate遵循典型的Linux / Unix行为,仅关闭日志文件,然后重新打开同名的日志文件。通过reopen,mongod期望在轮转之前,另一个进程会重命名该文件,并且创建新文件实现重新打开会。

原文链接:https://docs.mongodb.com/manual/reference/command/logRotate/

 

三、实践篇

 

1.打开mongo shell(由于在mongod实例的本地打开此命令,故--ip省略)。

D:\MongoDB\Server\3.4\bin>mongo --port  你的端口

2.切换到admin数据库。

use admin

3.授权。

db.auth("你的管理账号", "你的密码")

4.执行logRotate命令。

db.adminCommand({logRotate:1})

1-4步执行过程如下图所示:

spring boot mongodb 日志级别 mongodb日志管理_mongodb

5.执行结果

spring boot mongodb 日志级别 mongodb日志管理_java_02

四、制定计划任务,每天自动轮转

1.制定计划任务

在操作系统的“任务计划程序”中添加计划任务,填写时间、操作等信息,内容如下:

spring boot mongodb 日志级别 mongodb日志管理_数据库_03

 

spring boot mongodb 日志级别 mongodb日志管理_日志文件_04

 

spring boot mongodb 日志级别 mongodb日志管理_linux_05

 

2.编写bat脚本

编写日志轮转的bat执行脚本文件,新建一个后缀名是.bat文件内容如下:

@call :output>logRotate.log

exit

:output

@ECHO OFF

echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time%  log rotate begin......

D:\MongoDB\Server\3.4\bin\mongo --host 你的ip  --port 你的端口 -u 你的管理账号 -p 你的密码 --authenticationDatabase admin --eval "printjson(db.adminCommand({logRotate:1}))"

echo log rotate end......

end