在 Linux 下对 JS 应用(Node.js)产生的日志进行分割,常见做法有下面几种,按“是否改代码”和“是否用工具”来分:
logrotate(系统级日志分割)适合:所有 JS 程序(如 Node、前端构建日志、PM2 日志)
示例:分割 Node 日志
/var/log/node/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
说明:
daily:每天分割rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启进程直接截断日志(JS 程序常用)⚠️ JS 程序如果一直写同一个文件,
copytruncate很关键
如果你用 PM2 启动 Node:
pm2 install pm2-logrotate
常用配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
✅ 优点:
winston + winston-daily-rotate-fileNode.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',
maxFiles: '14d',
zippedArchive: true
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 特点:
pino + pino-roll适合高性能 Node 服务
npm install pino pino-roll
const pino = require('pino');
const logger = pino({
transport: {
type: 'rotating-file',
options: {
file: 'logs/app.log',
frequency: 'daily',
size: '10m',
limit: '7d'
}
}
});
浏览器日志一般:
| 场景 | 推荐方案 |
|---|---|
| Node + PM2 | PM2 logrotate |
| Node 原生 | winston / pino |
| 已有日志文件 | logrotate |
| 容器 / K8s | stdout + 日志收集 |
如果你愿意,可以告诉我:
我可以直接给你一套可用配置。