在 Debian 上,Node.js 本身通常不自带日志轮转功能,一般是通过 系统日志工具 或 Node 日志库 来实现。下面按常见场景给你讲几种做法。
logrotate(最常用)Debian 自带 logrotate,适合 Node 服务以文件方式写日志的情况。
假设 Node 日志在:
/var/log/myapp/app.log
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
如果你用 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
winston + winston-daily-rotate-filenpm 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
})
]
});
✅ 优点:
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 |
如果你愿意,可以告诉我:
我可以给你完全贴合你环境的具体配置。