轮换日志文件
Overview
当与 --logpath
选项或 systemLog.path
设置结合使用时,mongod
和 mongos
实例会向日志文件报告实时记录的所有活动和操作。在向日志文件报告活动数据时,默认情况下,MongoDB 只在响应 logRotate
命令,或 mongod
或 mongos
进程接收到来自操作系统的 SIGUSR1
信号时,才会轮换日志。服务器日志和审核日志可通过 logRotate
命令一起或单独轮换。
MongoDB 的标准日志轮换方法会存档当前日志文件并启动一个新日志文件。为此, mongod
或 mongos
实例通过以 IsoDate 格式在文件名后附加 UTC 时间戳来重命名当前日志文件。然后,该实例会打开一个新的日志文件,关闭旧的日志文件,并将所有新的日志条目发送到新的日志文件。
您还可以通过将 systemLog.logRotate
或 --logRotate
设置为 reopen
来配置 MongoDB 以支持 Linux/Unix logrotate
实用程序。使用 reopen
时,mongod
或 mongos
会关闭日志文件,然后重新打开具有相同名称的日志文件,并期望另一个进程在轮换之前重命名该文件。
最后,可以使用 --syslog
选项配置 mongod
,将日志数据发送到 syslog
。在这种情况下,您可以利用其他日志轮换工具。
要轮换日志文件,必须执行以下步骤之一:
请参见本页后面的示例。
默认日志轮换行为
默认情况下,MongoDB 使用 --logRotate rename
行为。用 rename
、mongod
或 mongos
重命名当前日志文件,在文件名后附加 UTC 时间戳,打开新日志文件,关闭旧日志文件,将所有新日志条目发送到新日志文件。
启动mongod
实例。
mongod -v --logpath /var/log/mongodb/server1.log
您也可以显式指定 --logRotate rename
。
轮换日志文件。
从 mongosh
中的 admin
数据库发出 logRotate
命令,轮换日志文件:
db.adminCommand( { logRotate : "server" } )
如果启用了审计,可以指定 1
至 logRotate
(而不是 server
),以便根据需要同时轮换服务器日志和审计日志。审计日志将根据 --logRotate
设置以与服务器日志相同的方式轮换。
注意
无法在已验证副本集的仲裁器上运行此命令。
日志轮换: --logRotate reopen
使用 --logRotate reopen
进行日志轮换时,会按照典型的 Linux/Unix 日志轮换行为关闭和打开日志文件。
启动mongod
实例,指定reopen
--logRotate
行为。
mongod -v --logpath /var/log/mongodb/server1.log --logRotate reopen --logappend
您必须在使用 --logRotate reopen
时使用 --logappend
选项。
系统日志轮换
使用系统日志轮换时,mongod
会将日志数据发送至系统日志,而不是将其写入文件。
MongoDB 将该组件包含在其发往 syslog
的日志消息中。
使用 选项启动mongod
--syslog
实例
mongod --syslog
请勿包含--logpath
。由于 --syslog
指示 mongod
向 syslog 发送日志数据,因此指定 --logpath
会导致错误。
要指定向系统日志记录信息时使用的设施级别,请使用 --syslogFacility
选项或 systemLog.syslogFacility
配置设置。
强制日志轮换: SIGUSR1
对于基于 Linux 和 Unix 的系统,可以使用 SIGUSR1
信号来轮换单个进程的日志。
例如,如果正在运行的 mongod
实例的进程 ID (PID) 为 2200
,则以下命令在 Linux 上为该实例轮转日志文件:
kill -SIGUSR1 2200