Linux JS日志轮转机制
核心概念与总体思路 在 Linux 上,JavaScript(尤其是 Node.js)应用本身不内置日志轮转功能,通常借助两类机制实现:系统级的 logrotate 和应用内的日志库(如 winston、pino、log4js)提供的按时间或大小切分功能。二者可以单独使用,也可组合:应用负责按天/按大小切分并写入新文件,系统负责压缩归档、清理过期与统一权限管理。
系统级方案 logrotate
/path/to/your/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
常用指令含义:
sudo logrotate -d /etc/logrotate.d/myappsudo logrotate -f /etc/logrotate.d/myapp/usr/sbin/kill -USR1 $(cat /var/run/nodejs.pid)(需应用支持 USR1 重开日志)。应用内方案 日志库轮转
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = winston.createLogger({
level: 'info',
transports: [transport]
});
上述配置按天切分,单文件超过 20MB 也会切分,并保留最近 14 天 的归档。如何选择与最佳实践