ubuntu

Ubuntu JS日志管理有哪些最佳实践

小樊
47
2025-09-26 20:01:39
栏目: 编程语言

Ubuntu下JavaScript(Node.js)日志管理最佳实践

1. 选择合适的日志库

根据应用需求选型:

const winston = require('winston');
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
    new winston.transports.Console() // 开发环境可输出到控制台
  ]
});

示例(Pino):

const pino = require('pino');
const logger = pino({ level: 'info' }, pino.destination('app.log'));
logger.info('Application started');

2. 合理配置日志级别

根据环境调整日志详细程度,避免不必要的性能消耗:

const env = process.env.NODE_ENV || 'development';
const level = env === 'production' ? 'info' : 'debug';
const logger = winston.createLogger({ level });

3. 实施日志轮转

避免单个日志文件过大导致磁盘空间耗尽,推荐两种方式:

4. 采用异步日志记录

避免同步写入阻塞主线程,提升应用性能。多数现代日志库(如Winston、Pino)默认支持异步:

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({ filename: 'async.log', async: true })
  ]
});

5. 使用结构化日志

以JSON格式输出日志,便于后续解析、过滤和分析(如通过ELK提取字段):

logger.info('User login', { userId: 123, ip: '192.168.1.1', status: 'success' });
// 输出:{"level":"info","message":"User login","userId":123,"ip":"192.168.1.1","status":"success"}

结构化日志的优势:

6. 集中化日志管理

将日志发送至集中式系统,解决分布式应用日志分散问题,便于统一监控和分析:

7. 性能优化技巧

8. 安全性考虑

0
看了该问题的人还看了