温馨提示×

nodejs linux日志如何滚动

小樊
49
2026-09-29 17:47:56
栏目: 编程语言

在 Node.js 项目运行于 Linux 环境下时,**日志滚动(Log Rotation)**通常有几种常见做法。下面按「推荐程度」给你讲清楚。


一、最推荐:使用 Linux 自带的 logrotate(生产环境首选)

原理:Node.js 只管往文件里写日志,logrotate 负责定期切割、压缩、清理。

1. 示例(假设日志路径)

/var/log/myapp/app.log

2. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

内容示例:

/var/log/myapp/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

3. 关键参数说明

  • daily:每天滚动
  • rotate 14:保留 14 天
  • compress:压缩旧日志
  • copytruncate:不重启 Node.js 就能滚动日志(非常重要)

✅ 适合 pm2、forever、systemd 启动的 Node 服务


二、Node.js 内部实现日志滚动(代码级)

如果你不想依赖系统工具,可以在 Node 里自己控制。

方案 1:使用 winston + winston-daily-rotate-file

npm install winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  filename: '/var/log/myapp/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',
  zippedArchive: true
});

const logger = winston.createLogger({
  transports: [transport]
});

logger.info('hello log');

✅ 自动按天切割
✅ 自动压缩
✅ 不依赖 Linux


三、PM2 自带日志管理(如果你用 PM2)

PM2 默认会生成日志,但不会自动清理。

安装 pm2-logrotate

pm2 install pm2-logrotate

配置示例

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

四、systemd + logrotate(systemd 服务)

如果你是:

systemctl start myapp

日志在:

/var/log/myapp/app.log

✅ 直接用 方案一 logrotate + copytruncate 即可


五、不推荐的方式

❌ 手动 fs.rename

  • 容易丢日志
  • 需要自己处理文件锁

总结建议

场景 推荐方案
生产服务器 logrotate
容器 / PaaS winston-daily-rotate-file
PM2 项目 pm2-logrotate
简单脚本 直接写文件 + logrotate

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

  • 是否使用 PM2 / Docker / systemd
  • 日志量大小
  • 是否允许重启进程

我可以给你一套可直接用的配置。

0 踩