在 Debian 上处理 JS(Node.js)应用日志分割,常见做法有几种,下面从简单到专业给你梳理一下。
Debian 自带 logrotate,适合任何文本日志文件。
假设日志路径:
/var/log/myapp/app.log
sudo nano /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
daily:每天分割rotate 14:保留 14 天compress:压缩旧日志copytruncate:不重启 Node.js 也能继续写日志(很重要)sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
✅ 适合:PM2、forever、裸 node 启动的日志
如果你不想依赖系统工具,可以用日志库:
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
})
]
});
✅ 适合:需要精细控制格式、级别
如果你用 PM2:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 14
pm2 set pm2-logrotate:compress true
✅ 最简单,但只适合 PM2 管理的应用
❌ 自己写 setInterval 切文件
❌ 用 >> 重定向不轮转(会无限变大)
| 场景 | 推荐方案 |
|---|---|
| 生产环境通用 | ✅ logrotate |
| PM2 管理 | ✅ pm2-logrotate |
| 需要复杂日志 | ✅ winston |
如果你愿意,可以告诉我:
我可以帮你写完整可直接用的配置。