温馨提示×

ubuntu nodejs日志如何切割

小樊
32
2026-10-15 06:22:49
栏目: 编程语言

在 Ubuntu 上,Node.js 本身不会自动切割日志,通常需要借助外部工具或日志库来实现日志切割(Log Rotation)。下面按常见方案从简单到专业给你介绍。


一、最推荐:使用 logrotate(系统级,最常用)

1️⃣ 安装(一般 Ubuntu 自带)

which logrotate

2️⃣ 假设 Node.js 日志位置

/var/log/node/app.log

3️⃣ 新建 logrotate 配置

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

内容示例:

/var/log/node/app.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

参数说明

  • daily:每天切割
  • rotate 14:保留 14 天
  • compress:压缩旧日志
  • copytruncate:不重启 Node.js 直接截断日志(很重要)

4️⃣ 测试是否生效

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

✅ 适合生产环境,不需要改 Node.js 代码


二、Node.js 代码内切割(使用日志库)

方案 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/node/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',
  zippedArchive: true
});

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

logger.info('hello');

✅ 自动按天生成日志
✅ 不需要 logrotate
❌ 增加代码复杂度


三、PM2 用户(非常推荐)

如果你用 PM2 启动 Node.js:

pm2 install pm2-logrotate

配置:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30

✅ 一行命令搞定
✅ 自动压缩、清理


四、不推荐但可用:nohup + 手动切割

mv app.log app.log.1
kill -USR1 <node_pid>

❌ 容易出错,不适合生产


✅ 总结建议

场景 推荐方案
原生 Node 启动 logrotate
PM2 启动 pm2-logrotate
想要代码级控制 winston-daily-rotate-file

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

  • 你是怎么启动 Node.js 的(直接 / PM2 / Docker)
  • 日志路径
  • 是否容器环境

我可以给你精确配置。

0 踩