温馨提示×

Debian环境下JS日志管理方法

小樊
43
2025-12-24 06:05:48
栏目: 编程语言

Debian环境下JS日志管理方法

一 日志库选择与快速配置

  • 常用库与适用场景
    • Winston:生态成熟、传输多(文件、控制台、HTTP 等),适合大多数应用。
    • Pino:高性能、低开销,适合高并发与 JSON 结构化场景。
    • Bunyan:结构化 JSON 输出,便于检索与分析。
    • Log4js:功能丰富,支持按级别与按文件输出、轮转等。
    • Morgan:HTTP 请求日志中间件,常与 Express 搭配使用。
  • 最小可用配置示例
    • Winston(区分错误与全量日志,开发环境输出到控制台)
      • 安装:npm i winston
      • 代码示例:
        • 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() }));
        • }
        • logger.info(‘Hello distributed log files!’);
    • Log4js(控制台与按日滚动文件)
      • 安装:npm i log4js
      • 代码示例:
        • const log4js = require(‘log4js’);
        • log4js.configure({
          • appenders: {
            • console: { type: ‘console’ },
            • file: { type: ‘file’, filename: ‘logs/app.log’, pattern: ‘yyyy-MM-dd’, alwaysIncludePattern: true, daysToKeep: 90, compress: true }
          • },
          • categories: { default: { appenders: [‘console’, ‘file’], level: ‘info’ } }
        • });
        • const logger = log4js.getLogger();
        • logger.info(‘Started’);

二 日志轮转与系统级集成

  • 应用内轮转(推荐用于容器/不可变基础设施)
    • 使用 winston-daily-rotate-filenpm i winston-daily-rotate-file
    • 示例:
      • const DailyRotateFile = require(‘winston-daily-rotate-file’);
      • new DailyRotateFile({
        • filename: ‘application-%DATE%.log’,
        • datePattern: ‘YYYY-MM-DD-HH’,
        • zippedArchive: true,
        • maxSize: ‘20m’,
        • maxFiles: ‘14d’
      • })
  • 系统级轮转(推荐用于物理机/虚拟机)
    • 安装与配置 logrotatesudo apt-get install logrotate
    • 新建配置:/etc/logrotate.d/nodejs
      • /path/to/your/nodejs/logs/*.log {
        • daily
        • rotate 7
        • compress
        • missingok
        • notifempty
        • create 0644 root root
      • }
    • 校验与强制执行:
      • sudo logrotate -d /etc/logrotate.d/nodejs(干跑)
      • sudo logrotate -f /etc/logrotate.d/nodejs(强制执行)
  • 写入系统日志(syslog/rsyslog)
    • 安装 rsyslog:sudo apt-get install rsyslog
    • 配置 /etc/rsyslog.d/50-default.conf 或自定义文件:
      • if $programname == ‘yourapp’ then /var/log/yourapp.log
      • & stop
    • 重启服务:sudo systemctl restart rsyslog
  • 使用 PM2 管理进程与日志
    • 安装:sudo npm install -g pm2
    • 启动:pm2 start app.js
    • 查看:pm2 logs;分离错误与标准输出:
      • {
        • “name”: “my-app”,
        • “script”: “app.js”,
        • “error_file”: “err.log”,
        • “out_file”: “out.log”
      • }

三 日志分析与可视化

  • 命令行快速检索
    • 实时查看:tail -f app.log
    • 关键字过滤:cat app.log | grep "error"
    • 系统服务日志:journalctl -u your-app.service(若以 systemd 托管)
  • 集中式日志平台
    • ELK Stack(Elasticsearch/Logstash/Kibana):强大的检索与可视化,适合复杂查询与合规归档。
    • Graylog:集中接收、索引与告警,部署相对简洁。
    • Grafana Loki:与 Grafana 深度集成,低成本聚合与查询,适合云原生/微服务。
    • Splunk:商业方案,搜索与可视化能力强,适合企业级场景。

四 生产实践与日志瘦身

  • 控制日志量与性能
    • 调整日志级别:生产环境优先 warn/error,开发环境开启 debug
    • 条件日志:仅在必要时记录,避免冗余调试信息。
    • 异步与高性能库:优先 Pino 等异步方案,降低 I/O 阻塞。
  • 规范与治理
    • 统一使用结构化日志(如 JSON),便于检索与聚合。
    • 避免记录敏感信息(密码、密钥、卡号等),必要时进行脱敏。
    • 合理设置保留周期归档策略,配合监控告警(如关键错误触发通知)。

0