Linux下Node.js日志自动化管理
一 核心方案总览
二 方案一 logrotate系统级轮转与清理
/var/log/nodejs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
# 可选:通知应用重新打开日志文件(若应用支持信号)
# kill -USR1 $(cat /var/run/nodeapp.pid) 2>/dev/null || true
endscript
}
sudo logrotate -f /etc/logrotate.d/nodejssudo logrotate -d /etc/logrotate.d/nodejs(dry-run)0 0 * * * find /var/log/nodejs -type f -name "*.gz" -mtime +30 -delete三 方案二 应用内日志库轮转
const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.json()
),
transports: [transport]
});
const pino = require('pino');
const rotate = require('pino-rotate');
rotate({
period: '1d',
path: '/var/log/nodejs',
maxFiles: 7,
gzip: true
});
const log4js = require('log4js');
log4js.configure({
appenders: {
app: {
type: 'file',
filename: 'logs/app.log',
pattern: 'yyyy-MM-dd',
alwaysIncludePattern: true,
daysToKeep: 90,
compress: true
}
},
categories: { default: { appenders: ['app'], level: 'info' } }
});
四 方案三 PM2进程管理器的日志管理
pm2 install pm2-logrotatepm2 set pm2-logrotate:max_size 10M、pm2 set pm2-logrotate:retain 7pm2 set pm2-logrotate:compress truepm2 set pm2-logrotate:rotateInterval "0 0 * * *"(每天零点)module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
output: './logs/out.log',
error: './logs/err.log',
log: './logs/combined.log',
log_date_format: 'YYYY-MM-DD HH:mm Z',
log_rotation: {
interval: '1d',
size_limit: 10000000,
line_limit: 200000
}
}]
};
五 方案四 集中化与远程日志
module(load="imudp")
input(type="imudp" port="514")
local0.* @192.0.2.10:514
const syslog = require('syslog');
syslog.openlog('nodejs-app', { facility: 'local0' });
syslog.syslog('Hello, world!');
syslog.closelog();
六 实践建议与运维要点
logrotate -d干跑;上线后定期核查轮转与清理是否生效。