Debian 环境下优化 JavaScript 日志的实用方案
一 核心优化策略
二 快速落地示例
使用 Pino(高性能,生产推荐)
npm i pino pino-prettyconst pino = require('pino');
const logger = pino({
level: process.env.LOG_LEVEL || 'info',
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
});
logger.info({ route: '/health' }, 'server started');
logger.error({ err: new Error('boom') }, 'unexpected error');
LOG_LEVEL=debug node app.js(开发时开启更细粒度)使用 Winston(灵活多传输)
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: process.env.LOG_LEVEL || 'info',
format: format.combine(format.timestamp(), format.json()),
transports: [
new transports.Console(),
new transports.File({ filename: 'error.log', level: 'error' }),
new transports.File({ filename: 'combined.log' })
]
});
LOG_LEVEL=debug node app.jsExpress 场景搭配 HTTP 请求日志(morgan)
const express = require('express');
const morgan = require('morgan');
const app = express();
app.use(morgan('combined')); // 生产常用 'combined',开发可用 'dev'
app.get('/', (req, res) => res.send('OK'));
app.listen(3000);
三 系统层面日志治理
使用 logrotate 轮转应用日志(/etc/logrotate.d/myapp)
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 root adm
}
使用 pm2 与 pm2-logrotate(进程管理一体化)
pm2 install pm2-logrotate{
"append": true,
"rotateInterval": "1d",
"retain": 7,
"compress": true,
"queueLimit": 100
}
四 集中式日志与监控
Fluentd 采集并写入 Elasticsearch
sudo apt-get install -y fluentd<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match **>
@type elasticsearch
host localhost
port 9200
logstash_format true
flush_interval 10s
</match>
监控与告警(Prometheus + Grafana)
sudo apt-get install -y prometheus grafana五 性能与安全最佳实践