debian

Debian下JS日志记录有哪些注意事项

小樊
42
2025-10-16 05:31:22
栏目: 编程语言

Debian下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' })
  ]
});
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({ format: winston.format.simple() }));
}

2. 合理设置日志级别

根据环境调整日志级别,避免不必要的性能消耗:

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

3. 实现日志轮转

防止日志文件过大占用磁盘空间,推荐使用以下工具:

const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
  transports: [
    new DailyRotateFile({
      filename: 'application-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
});

4. 强化安全性

避免敏感信息泄露,保护日志数据的完整性和保密性:

const sanitize = require('sanitize-error');
logger.error('Database connection failed', sanitize(error));

5. 优化性能

避免日志记录成为应用瓶颈:

const pino = require('pino');
const logger = pino({ level: 'info' }, pino.destination('app.log')); // 异步写入

6. 统一日志格式

采用结构化格式(如JSON)便于后续解析和分析:

{
  "timestamp": "2025-10-16T12:34:56.789Z",
  "level": "error",
  "pid": 1234,
  "module": "auth",
  "message": "Failed login attempt",
  "context": { "userId": "admin", "ip": "192.168.1.1" }
}

7. 集中管理与监控

实现日志的统一收集和分析,提升问题排查效率:

# 安装pm2和pm2-logrotate
npm install pm2 -g
pm2 install pm2-logrotate

# 配置pm2-logrotate(保留7天日志,压缩)
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true

8. 环境适配

根据不同环境(开发、测试、生产)调整日志配置:

const isProduction = process.env.NODE_ENV === 'production';
const transports = [];
if (isProduction) {
  transports.push(new winston.transports.File({ filename: 'error.log', level: 'error' }));
  transports.push(new winston.transports.File({ filename: 'combined.log' }));
} else {
  transports.push(new winston.transports.Console({ format: winston.format.simple() }));
}
const logger = winston.createLogger({ level: isProduction ? 'warn' : 'debug', transports });

0
看了该问题的人还看了