高并发场景下的 Node.js 日志配置实践
一 核心原则
二 推荐配置方案
方案A 高性能 JSON 日志到文件 + 按时间轮转(Pino)
npm i pino pino-rotateconst pino = require('pino');
const rotate = require('pino-rotate');
rotate({
period: '1d', // 每日轮替
path: 'app.log', // 日志路径
limit: '10m', // 单文件上限
compress: true, // 压缩归档
});
const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
logger.info({ route: '/health', status: 200 }, 'health check ok');
pino-pretty 仅在本地美化输出,避免生产使用。方案B 多传输与异常安全(Winston)
npm i winston winston-daily-rotate-fileconst winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const rotateTransport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
});
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
defaultMeta: { service: 'my-service' },
transports: [
rotateTransport,
new winston.transports.Console({
format: winston.format.simple(),
}),
],
exceptionHandlers: [rotateTransport], // 未捕获异常也写入
rejectionHandlers: [rotateTransport], // Promise 拒绝也写入
});
logger.info('started');
三 系统与运维配置
四 性能与安全要点
五 快速落地清单