温馨提示×

debian nodejs日志如何轮转

小樊
38
2026-09-13 05:28:19
栏目: 编程语言

在 Debian 上,Node.js 本身通常不自带日志轮转功能,一般是通过 系统日志工具Node 日志库 来实现。下面按常见场景给你讲几种做法。


一、使用系统工具(推荐,最省心)

1️⃣ 使用 logrotate(最常用)

Debian 自带 logrotate,适合 Node 服务以文件方式写日志的情况。

示例:Node 日志文件

假设 Node 日志在:

/var/log/myapp/app.log

创建 logrotate 配置

sudo nano /etc/logrotate.d/myapp

内容示例:

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

说明:

  • copytruncate:不重启 Node 也能轮转(很重要
  • compress:压缩旧日志
  • rotate 7:保留 7 天

手动测试

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

2️⃣ 使用 systemd journal(如果 Node 输出到 stdout)

如果你用 systemd 启动 Node:

[Service]
ExecStart=/usr/bin/node /opt/myapp/app.js
StandardOutput=journal
StandardError=journal

查看日志:

journalctl -u myapp

journal 自动轮转,由 systemd 管理:

sudo journalctl --vacuum-time=7d

二、Node.js 代码层日志轮转(不依赖系统)

1️⃣ 使用 winston + winston-daily-rotate-file

npm install winston winston-daily-rotate-file

示例:

const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

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

✅ 优点:

  • 不依赖系统
  • 跨平台
  • 自动压缩

2️⃣ 使用 pm2(如果你用 pm2 管理 Node)

pm2 自带日志管理:

pm2 install pm2-logrotate

配置:

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

日志位置:

~/.pm2/logs/

三、方案选择建议

场景 推荐方式
生产服务器 logrotate
Docker / k8s stdout + 容器日志
跨平台 Node 应用 winston-daily-rotate-file
用 pm2 pm2-logrotate

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

  • Node 是怎么启动的(systemd / pm2 / docker)
  • 日志是写文件还是 stdout

我可以给你完全贴合你环境的具体配置

0