溫馨提示×

CentOS中Node.js日志管理方法

小樊
44
2025-10-03 03:40:11
欄目: 編程語言

CentOS中Node.js日志管理方法

一、選擇合適的日志庫

日志庫是Node.js日志管理的基礎,CentOS環境下常用以下庫:

  • Winston:功能全面、支持多種傳輸方式(文件、控制臺、數據庫等),是當前最流行的選擇,適合需要靈活配置的場景。
  • Pino:輕量級、高性能(比Winston快3倍以上),適合高負載應用,但功能相對基礎。
  • Bunyan:輸出結構化JSON日志,方便后續用ELK等工具分析,適合需要日志結構化的場景。
  • Log4js:提供靈活的日志級別控制、文件輪轉等功能,適合傳統項目。

二、使用PM2進行進程與日志管理

PM2是Node.js進程管理工具,內置日志管理功能,操作簡便:

  1. 安裝PM2:全局安裝npm install pm2 -g。
  2. 啟動應用并記錄日志pm2 start app.js --name my-node-app--name指定應用名稱)。
  3. 查看日志
    • 查看所有應用日志:pm2 logs;
    • 查看特定應用日志:pm2 logs my-node-app;
    • 實時查看日志:pm2 logs --lines 1000(顯示最近1000行)。
  4. 日志輪轉配置:通過ecosystem.config.js文件自定義:
    module.exports = {
      apps: [{
        name: 'my-node-app',
        script: 'app.js',
        out_file: '/var/log/nodejs/my-app-out.log', // 標準輸出路徑
        error_file: '/var/log/nodejs/my-app-err.log', // 錯誤輸出路徑
        log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志時間格式
        log_rotation: {
          period: '1d', // 每天輪轉
          rotateAfterSize: '10M', // 文件超過10MB輪轉
          keepFiles: 7 // 保留7天日志
        }
      }]
    };
    
    啟動時加載配置:pm2 start ecosystem.config.js。

三、利用logrotate工具管理日志輪轉

logrotate是Linux系統自帶的日志輪轉工具,可自動切割、壓縮、刪除舊日志:

  1. 安裝logrotatesudo yum install logrotate -y。
  2. 創建配置文件:在/etc/logrotate.d/目錄下創建nodejs-app文件,內容如下:
    /var/log/nodejs/*.log {
      daily                # 每天輪轉
      rotate 7             # 保留7天日志
      compress             # 壓縮舊日志(.gz格式)
      delaycompress        # 延遲壓縮(避免當天日志被壓縮)
      missingok            # 日志文件不存在時不報錯
      notifempty           # 日志為空時不輪轉
      create 0640 root adm # 創建新日志文件并設置權限
    }
    
  3. 測試配置sudo logrotate -f /etc/logrotate.d/nodejs-app(強制立即執行)。

四、集中式日志管理(可選)

對于分布式系統或需要集中分析的場景,可將日志發送到集中式平臺:

  • ELK Stack(Elasticsearch+Logstash+Kibana)
    • Logstash收集日志,Elasticsearch存儲并索引,Kibana提供可視化界面。
    • 配置Winston使用winston-elasticsearch傳輸器,將日志直接發送到Elasticsearch。
  • Fluentd:輕量級日志收集器,支持多種輸入/輸出插件,可將日志發送到Elasticsearch、S3等。
  • Splunk:商業工具,提供強大的日志搜索、分析和告警功能,適合企業級場景。

五、日志級別管理

合理設置日志級別可提高日志可用性:

  • DEBUG:調試信息(開發環境使用,記錄詳細流程);
  • INFO:常規信息(如應用啟動、請求處理);
  • WARN:警告信息(如磁盤空間不足,不影響運行但需關注);
  • ERROR:錯誤信息(如數據庫連接失敗,影響部分功能);
  • FATAL:致命錯誤(如應用崩潰,需立即處理)。 通過日志庫的level參數設置,例如Winston:level: process.env.NODE_ENV === 'production' ? 'info' : 'debug'(生產環境只記錄INFO及以上級別)。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女