debian

Node.js在Debian上日志记录最佳实践

小樊
51
2025-09-27 07:51:31
栏目: 编程语言

Node.js在Debian上日志记录最佳实践

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')();
pino.info({ event: 'user_login', userId: 123 }, 'User logged in');

2. 合理配置日志级别

按环境区分级别,避免不必要的磁盘占用:

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

3. 实现日志轮转

防止日志文件过大,推荐使用logrotate(Debian自带):

4. 集中式日志管理

对于分布式系统,使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog集中存储、分析日志:

5. 异步日志记录

避免日志写入阻塞主线程,影响应用性能:

6. 结构化日志格式

使用JSON格式,便于后续自动化处理(如解析、过滤、聚合):

logger.info({ 
  event: 'order_created', 
  orderId: 456, 
  amount: 100.00,
  user: 'user123'
}, 'Order created successfully');

结构化日志可通过工具(如Logstash)提取字段,生成报表或告警。

7. 敏感信息过滤

避免日志泄露用户隐私或系统敏感数据(如密码、API密钥):

8. 监控与告警

设置日志监控,及时发现异常:

9. 进程管理器集成

使用PM2管理Node.js进程,简化日志操作:

PM2会自动将日志输出到~/.pm2/logs/目录,并支持日志轮转。

10. 系统日志集成

将Node.js日志发送到Debian系统日志(rsyslog/journald),统一管理:

重启rsyslogsudo systemctl restart rsyslog

0
看了该问题的人还看了