如何在 运行 服务器使用 pm2 时轮换日志文件?

How to rotate log files while running server with pm2?

我们正在使用节点模块 pm2 运行 服务器并捕获应用程序日志。

但由于流量非常大,大量数据存储在单个文件中,大约超过 100Gb。

我们是否有可能在不重启服务器的情况下每 1 小时或每 1Gb 文件更改文件?

目前我们正在手动执行此操作,重新启动服务器并重命名造成问题的现有文件。

您可以使用pm2-logrotate

pm2 install pm2-logrotate

# max log size is 1GB
pm2 set pm2-logrotate:max_size 1G

# compress logs when rotated (optional)
pm2 set pm2-logrotate:compress true

# force rotate every hours
pm2 set pm2-logrotate:rotateInterval '0 * * * *'

我个人不使用 pm2-logrotate,因为它不再维护,更糟糕的是,它有很多错误。有一次我在我的生产服务器上使用它,它立即重复创建导致 0% space 的大型日志文件并使服务器崩溃。那可不是什么好日子。

PM2 网站有一个名为“设置本机 logrotate”的部分,其中告诉您 运行:

sudo pm2 logrotate -u user

显然将用户更改为 运行ning pm2 的实际用户。它将在 /etc/logrotate.d/pm2-user 处创建一个文件并对其进行编辑,使其看起来像这样:

/home/user/.pm2/pm2.log /home/user/.pm2/logs/*.log {
        su user user
        rotate 12
        weekly
        missingok
        notifempty
        compress
        delaycompress
        copytruncate
        create 0640 user user
}

最重要的部分是su user user部分。以 root 身份登录 运行s,它不喜欢创建 non-root 用户可以查看的日志文件,因此它会失败,而且通常是无声的。这 运行 违反了 npm 哲学,后者更喜欢 运行 通常没有 sudo 特权的事情。通过在 logrotate 配置文件中指定用户,您可以解决这个问题。

我花了一段时间才弄明白 - 希望它能帮助别人。