Ubuntu环境下优化JS日志记录的实用方案
一 核心优化策略
二 快速落地配置示例
npm i pino// 生产:JSON 到文件
const pino = require('pino');
const fs = require('fs');
const logger = pino({ level: 'info' }, pino.destination('/var/log/myapp/app.log'));
// 开发:美化控制台输出(仅开发)
// const logger = require('pino')({ level: 'debug', transport: { target: 'pino-pretty' } });
logger.info({ userId: 42, action: 'login' }, 'user login success');
npm i winstonconst winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: '/var/log/myapp/error.log', level: 'error' }),
new winston.transports.File({ filename: '/var/log/myapp/combined.log' }),
],
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({ format: winston.format.simple() }));
}
logger.info('Service started');
logger.error('Unexpected failure', { err: new Error('boom') });
npm i morganconst express = require('express');
const morgan = require('morgan');
const app = express();
app.use(morgan('combined')); // 生产可用 combined;开发可用 dev
app.get('/', (_, res) => res.send('OK'));
app.listen(3000);
npm i -g pm2pm2 start app.js -n myapp --log-date-format "YYYY-MM-DD HH:mm:ss"pm2 logs myapp --lines 200三 系统层面日志轮转与权限
/etc/logrotate.d/nodejs-app/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 nodejs nodejs
}
journalctl -u myapp.service -f四 集中化与监控告警
五 性能与安全最佳实践