温馨提示×

Linux下如何切割Nodejs日志

小樊
40
2026-08-17 17:13:19
栏目: 编程语言

在 Linux 下切割 Node.js 日志,常见做法有 4 种,从简单到生产级依次如下。你可以根据项目规模选择。


一、最简单:用 logrotate(✅ 强烈推荐)

适合大多数场景,不需要改 Node.js 代码。

1️⃣ 假设日志路径

/var/log/node/app.log

2️⃣ 创建 logrotate 配置

sudo vim /etc/logrotate.d/node-app

示例配置:

/var/log/node/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

3️⃣ 参数说明

参数 作用
daily 每天切割
rotate 7 保留 7 份
compress 压缩旧日志
missingok 日志不存在不报错
notifempty 空日志不切割
copytruncate 复制后清空原文件(Node 不重启)

优点

  • 不改代码
  • 系统级标准方案
  • 稳定可靠

⚠️ 注意:
copytruncate 在极高频日志下可能有极少量丢失,但一般可接受。


二、Node.js 内建方式:使用日志库(如 winston / pino)

示例:winston + 按天切割

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

const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '7d'
});

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

logger.info('hello node');

优点

  • 不依赖系统
  • 精确控制格式

缺点

  • 增加 Node 进程负担
  • 容器环境需额外注意

三、PM2 自带日志切割(适合 PM2 部署)

1️⃣ 安装模块

pm2 install pm2-logrotate

2️⃣ 配置

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

优点

  • 一键搞定
  • 适合 PM2 用户

缺点

  • 只适用于 PM2
  • 不适合裸 Node 启动

四、手动切割(不推荐)

mv app.log app.log.2026-01-21
kill -USR1 $(pgrep node)

⚠️ 需要 Node 支持重新打开文件描述符(不是所有情况都安全)


✅ 推荐方案总结

场景 推荐
生产环境 ✅ logrotate
PM2 部署 ✅ pm2-logrotate
自定义日志格式 winston / pino
临时测试 手动

常见坑提醒

不要直接 rm 正在写入的日志
❗ 不要只用 mv 不通知进程
❗ Docker 中建议挂载 volume + logrotate


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

  • 是否使用 PM2 / Docker
  • 日志路径
  • 日志大小 & 频率

我可以帮你写一份 完全可用的 logrotate 配置

0