Linux服务器上JS日志管理实操指南
一 核心原则与日志规范
二 采集与落盘方案
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
format: format.combine(
format.timestamp(),
format.json()
),
transports: [
new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
}),
new transports.Console({ format: format.simple() })
]
});
sudo npm i -g pm2
pm2 start app.js -n myapp
pm2 install pm2-logrotate # 启用日志轮转插件
journalctl -u myapp.service -f
三 轮转与保留策略
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 node node
copytruncate
}
四 集中化与可视化
五 日常运维与排障命令
tail -f /var/log/myapp/app-2025-09-01.log
grep --color=auto -i 'error\|timeout' /var/log/myapp/*.log
grep -Eo 'req_id=[a-z0-9]+' app.log | sort | uniq -c | sort -nr
journalctl -u myapp.service --since "2025-09-01 10:00:00" --until "2025-09-01 12:00:00"
# 归档30天前日志
find /var/log/myapp -name "*.gz" -mtime +30 -delete
rsync -avz /var/log/myapp/ backup:/logs/myapp/