在 Debian 上,Node.js 本身的日志归档通常不是 Node.js 自己做的,而是由系统日志机制 + 日志轮转工具来完成。下面按常见场景给你一套实用方案。
Debian 自带 logrotate,非常适合 Node.js 日志归档。
例如:
/var/log/node/app.log
sudo nano /etc/logrotate.d/node-app
示例配置:
/var/log/node/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
daily:每天轮转rotate 14:保留 14 天compress:压缩旧日志copytruncate:不重启 Node.js 也能继续写日志(非常适合 Node)sudo logrotate -d /etc/logrotate.d/node-app
sudo logrotate -f /etc/logrotate.d/node-app
如果你用 PM2 管理 Node.js:
~/.pm2/logs/app-out.log
~/.pm2/logs/app-error.log
PM2 官方提供配置:
pm2 logrotate
或手动:
sudo nano /etc/logrotate.d/pm2
/home/*/.pm2/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
copytruncate
}
如果你是自己在代码里写日志(如 winston、pino):
winston + winston-daily-rotate-file示例:
const winston = require('winston');
require('winston-daily-rotate-file');
const transport = new winston.transports.DailyRotateFile({
dirname: '/var/log/node',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d',
zippedArchive: true
});
这样日志自动按天归档 + 压缩,不用 logrotate。
Debian 上 Node 用 systemd 启动时:
journalctl -u node-app
归档由 systemd-journald 管理:
sudo nano /etc/systemd/journald.conf
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=2week
然后:
sudo systemctl restart systemd-journald
| 场景 | 推荐方案 |
|---|---|
| 普通 Node 服务 | logrotate + copytruncate |
| PM2 | pm2 logrotate |
| 自己写日志 | winston-daily-rotate-file |
| systemd 启动 | journalctl |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。