Linux下高效管理JS日志
一 核心原则
二 采集与落盘
// npm i winston
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
logger.info({ event: 'user.login', userId: '12345', ip: '192.168.1.1' });
// npm i winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');
logger.add(new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
}));
pm2 logs 实时查看、按应用分流,并与后续集中式方案对接。三 轮转与清理
/path/to/your/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
#!/usr/bin/env bash
LOG_DIR="/path/to/your/logs"
find "$LOG_DIR" -type f -name "*.log*" -mtime +7 -delete
四 集中化与可视化
五 监控告警与安全合规
tail -f logs/combined.log | grep "ERROR",或配合awk/sed做字段提取与统计。tail -f logs/combined.log | grep --line-buffered ERRORgrep ERROR logs/combined.log | awk '{print $1":"$2}' | sort | uniq -c | sort -nrawk '$3 ~ /api\/v1/ {print $0}' logs/combined.log > api_errors.log