Docs 菜单

Docs 主页开发应用程序MongoDB Manual

轮换日志文件

在此页面上

  • 概述
  • 默认日志轮换行为
  • 日志轮换: --logRotate reopen
  • 系统日志轮换
  • 强制日志轮换: SIGUSR1

当与 --logpath 选项或 systemLog.path 设置一起使用时,mongodmongos 实例会向日志文件报告实时记录的所有活动和操作。在向日志文件报告活动数据时,默认情况下,MongoDB 只在响应 logRotate 命令,或在 mongodmongos 进程接收到来自操作系统的 SIGUSR1 信号时才轮换日志。服务器日志和审核日志可通过 logRotate 命令一起或单独轮换。

MongoDB 的标准日志轮换方法会存档当前日志文件并启动一个新日志文件。为此, mongodmongos 实例通过以 IsoDate 格式在文件名后附加 UTC 时间戳来重命名当前日志文件。然后,该实例会打开一个新的日志文件,关闭旧的日志文件,并将所有新的日志条目发送到新的日志文件。

您还可以通过将 systemLog.logRotate--logRotate 设置为 reopen 来配置 MongoDB 以支持 Linux/Unix logrotate 实用程序。使用 reopen 时,mongodmongos 会关闭日志文件,然后重新打开具有相同名称的日志文件,并期望另一个进程在轮换之前重命名该文件。

最后,可以使用 --syslog 选项配置 mongod,将日志数据发送到 syslog。在这种情况下,您可以利用其他日志轮换工具。

注意

logRotate不是复制命令。您必须连接到副本集的每个实例并运行logRotate才能轮换副本集节点的日志。

要轮换日志文件,必须执行以下步骤之一:

  • mongodmongos 进程发送 SIGUSR1 信号。

  • 运行 MongoDB logRotate 命令。

  • 运行 Linux/Unix logrotate 实用程序。

请参见本页后面的示例。

提示

另请参阅:

有关日志记录的信息,请参阅“进程日志记录”部分。

默认情况下,MongoDB 使用 --logRotate rename 行为。用 renamemongodmongos 重命名当前日志文件,在文件名后附加 UTC 时间戳,打开新日志文件,关闭旧日志文件,将所有新日志条目发送到新日志文件。

1
mongod -v --logpath /var/log/mongodb/server1.log

您也可以显式指定 --logRotate rename

2

在另一个终端中列出匹配的文件:

ls /var/log/mongodb/server1.log*

结果应包括一个日志文件,即 server1.log

3

logRotate通过从admin 中的 数据库发出mongosh 命令来轮换日志文件:

db.adminCommand( { logRotate : "server" } )

如果启用了审计,可以指定 1logRotate(而不是 server),以便根据需要同时轮换服务器日志和审计日志。审计日志将根据 --logRotate 设置以与服务器日志相同的方式轮换。

注意

无法在已验证副本集的仲裁器上运行此命令。

4

列出新的日志文件以查看新创建的日志:

ls /var/log/mongodb/server1.log*

应该列出两个日志文件:server1.logmongodmongos 重新打开日志文件时生成的日志文件,server1.log.<timestamp> 是重命名后的原始日志文件。

轮换日志文件不会修改“旧的”轮换日志文件。轮换日志时,会重命名 server1.log 文件以包含时间戳,而新的空 server1.log 文件会接收所有新的日志输入。

使用 --logRotate reopen 进行日志轮换时,会按照典型的 Linux/Unix 日志轮换行为关闭和打开日志文件。

1
mongod -v --logpath /var/log/mongodb/server1.log --logRotate reopen --logappend

您必须在使用 --logRotate reopen 时使用 --logappend 选项。

2

在另一个终端中列出匹配的文件:

ls /var/log/mongodb/server1.log*

结果应包括一个日志文件,即 server1.log

3

mongosh 中的admin数据库发出logRotate命令,以轮换日志文件

db.adminCommand( { logRotate : "server" } )

您应按照典型的 Linux/Unix 日志轮换行为,使用外部进程重命名日志文件。

使用系统日志轮换时,mongod 会将日志数据发送至系统日志,而不是将其写入文件。

MongoDB 在其发送给syslog的日志消息中包含该组件

1
mongod --syslog

请勿包含--logpath。由于 --syslog 指示 mongod 向 syslog 发送日志数据,因此指定 --logpath 会导致错误。

要指定向系统日志记录信息时使用的设施级别,请使用 --syslogFacility 选项或 systemLog.syslogFacility 配置设置。

2

使用系统默认的日志轮换机制存储和轮换日志输出。

对于基于 Linux 和 Unix 的系统,可以使用 SIGUSR1 信号来轮换单个进程的日志。

例如,如果正在运行的 mongod 实例的进程 ID (PID) 为 2200,则以下命令在 Linux 上为该实例轮转日志文件:

kill -SIGUSR1 2200
← 终止正在运行的操作