Linux 环境下 JavaScript 日志性能优化
一 核心策略
二 配置示例
使用 Pino(异步、生产 JSON、开发期美化)
const pino = require('pino');
// 生产:JSON;开发:美化输出
const isProd = process.env.NODE_ENV === 'production';
const logger = pino({
level: isProd ? 'info' : 'debug',
transport: isProd ? undefined : { target: 'pino-pretty' }
});
logger.info({ reqId: 'abc-123' }, 'user login');
logger.error({ err: new Error('boom') }, 'operation failed');
使用 Winston + 按日轮转文件(异步、按级别分流、压缩归档)
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = createLogger({
level: 'info',
format: format.combine(format.timestamp(), format.json()),
transports: [
transport,
new transports.Console({ format: format.simple() })
]
});
使用 logrotate 管理本地日志(系统级轮转、压缩、保留策略)
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 node node
copytruncate
}
说明:开发期可关闭美化(避免额外序列化开销);生产期务必使用 JSON 与异步;轮转策略结合磁盘与检索需求设置 maxSize/maxFiles 与保留天数。
三 监控与调优
四 常见陷阱与排查