在Ubuntu上对Node.js日志进行分割可采用以下策略:
sudo apt-get install logrotate
。/etc/logrotate.d/
下创建配置文件(如nodejs-app
),内容示例:/path/to/your/nodejs/app/logs/*.log {
daily # 每天分割
rotate 7 # 保留7天日志
compress # 压缩旧日志
missingok # 文件不存在时不报错
notifempty # 空文件不分割
create 0640 root adm # 新日志权限和属主
}
可根据需求调整daily
为size
(按大小分割)等参数。sudo logrotate -f /etc/logrotate.d/nodejs-app
手动测试,系统默认通过cron每日自动执行。winston:安装winston
及winston-daily-rotate-file
,配置示例:
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD', // 按日期分割
maxSize: '10m', // 单个文件最大10MB
maxFiles: '14d' // 保留14天日志
})
]
});
支持按日期、大小灵活分割,且可集成到应用代码中。
log4js:配置dateFile
类型的appender实现按日期分割:
const log4js = require('log4js');
log4js.configure({
appenders: {
file: {
type: 'dateFile',
filename: 'logs/app.log',
pattern: '-yyyy-MM-dd.log'
}
},
categories: { default: { appenders: ['file'], level: 'info' } }
});
const logger = log4js.getLogger();
适合需要结构化日志的场景。
ecosystem.config.js
中配置:module.exports = {
apps: [{
name: 'app',
script: 'app.js',
log_date_format: 'YYYY-MM-DD HH:mm:ss',
log_rotation: true,
log_rotation_interval: '1d', // 每天分割
log_rotation_size: '10M', // 或按大小分割
log_rotation_retain: 7 // 保留7天
}]
};
通过pm2 start ecosystem.config.js
启动,支持自动切割和清理。root
或应用用户,避免权限问题。以上策略可单独或组合使用,根据实际需求选择最适合的方式[1,2,3,4,5,6,7,8,9,10,11]。