温馨提示×

Nodejs日志在Debian如何轮转

小樊
47
2026-07-13 04:04:09
栏目: 编程语言

在 Debian 上,Node.js 本身不负责日志轮转(log rotation),通常由 系统工具 来完成。最常见、推荐的做法是使用 logrotate。下面按常见场景给你一套完整方案。


一、使用 logrotate(最推荐 ✅)

1. 安装 logrotate(一般已预装)

dpkg -l | grep logrotate

如果没有:

sudo apt update
sudo apt install logrotate

2. 示例:Node.js 应用日志轮转

假设你的 Node.js 日志路径:

/var/log/myapp/app.log

创建 logrotate 配置文件

sudo nano /etc/logrotate.d/myapp

示例配置

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 myapp myapp
    copytruncate
}

说明:

参数 作用
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
delaycompress 延迟压缩
missingok 日志不存在不报错
notifempty 空日志不轮转
create 创建新日志文件
copytruncate ✅ 关键:不重启 Node.js

3. 测试 logrotate

sudo logrotate -d /etc/logrotate.d/myapp

-d 是 debug 模式,不会真正执行)

真正执行:

sudo logrotate -f /etc/logrotate.d/myapp

二、Node.js 写入日志的正确方式

✅ 推荐:直接写文件(不要自己切日志)

const fs = require('fs');
const stream = fs.createWriteStream('/var/log/myapp/app.log', { flags: 'a' });

stream.write('hello\n');

配合 logrotate + copytruncate 即可。


三、如果你使用 PM2(非常常见)

PM2 自带日志管理 ✅

pm2 logs

日志默认在:

~/.pm2/logs/

PM2 日志轮转插件

pm2 install pm2-logrotate

常用配置:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true

PM2 用户首选方案


四、不推荐的方式 ❌

方式 原因
Node.js 里自己切日志 容易出错、复杂
删除正在写入的日志 磁盘不释放
不重启应用切日志 必须用 copytruncate

五、常见坑位总结

❗ Node.js 日志不释放磁盘

原因:

  • 删除了日志文件
  • 但 Node.js 仍持有 fd

解决:

sudo lsof | grep deleted

✅ 使用 copytruncate 或重启进程


六、推荐方案总结

场景 推荐
原生 Node.js logrotate + copytruncate
PM2 pm2-logrotate
Docker 宿主机 logrotate / Docker log driver

如果你愿意,可以告诉我:

  • 是否使用 PM2 / Docker / systemd
  • 日志路径
  • 日志量(MB/GB)

我可以直接帮你写一份 可用的 logrotate 配置

0