在 Linux 下对 Node.js 日志进行分割,常见做法有下面几类,按“推荐程度 + 使用频率”给你说明:
适合 Node.js 项目,不依赖系统配置。
npm install winston winston-daily-rotate-file
示例:
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 按天 / 大小自动分割
✅ 自动删除旧日志
✅ 不依赖 Linux 环境
性能极高,适合高并发服务。
npm install pino pino-roll
const pino = require('pino');
const rotate = require('pino-roll');
const logger = pino(
{},
rotate({ file: 'logs/app.log', frequency: 'daily', size: '10M' })
);
适合:
console.log 写文件示例配置 /etc/logrotate.d/node-app:
/var/log/node/app.log {
daily
rotate 14
size 100M
compress
missingok
notifempty
copytruncate
}
✅ 系统级稳定
✅ 自动压缩
⚠️ 需要 copytruncate(Node 不重启)
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
✅ 零代码修改
✅ 适合 PM2 部署
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
| 场景 | 推荐 |
|---|---|
| Node 项目 | winston / pino |
| 已有日志文件 | logrotate |
| PM2 部署 | pm2-logrotate |
| Docker | docker log driver |
如果你愿意,可以告诉我:
console.log 还是日志库?我可以直接给你一份可用配置。