溫馨提示×

如何設置Ubuntu Node.js日志記錄策略

小樊
42
2025-10-09 10:30:43
欄目: 編程語言

如何設置Ubuntu Node.js日志記錄策略

在Ubuntu系統上為Node.js應用設置日志記錄策略,需圍繞日志庫選擇、日志級別控制、日志輪轉、結構化日志、異步記錄及監控等核心環節展開,以下是具體步驟:

1. 選擇合適的日志庫

Node.js生態中有多個成熟的日志庫,可根據需求選擇:

  • Winston:功能全面,支持多傳輸方式(控制臺、文件、HTTP等),適合需要高度自定義的場景;
  • Pino:以高性能著稱,輸出JSON格式日志,適合高并發生產環境;
  • Bunyan:結構化日志支持好,日志格式規范,便于后續分析;
  • Morgan:專為Express應用設計,用于記錄HTTP請求日志。
    示例(安裝Winston):
npm install winston

2. 配置日志級別

根據環境(開發/生產)設置不同日志級別,避免記錄無關信息影響性能:

  • 開發環境:使用debugverbose,輸出詳細信息便于調試;
  • 生產環境:使用warnerror,僅記錄關鍵問題。
    可通過環境變量、配置文件代碼設置:
  • 環境變量(推薦):
    const logLevel = process.env.LOG_LEVEL || 'info'; // 默認info
    const logger = winston.createLogger({ level: logLevel });
    
    啟動應用時指定環境變量:
    export LOG_LEVEL=debug
    node app.js
    
  • 配置文件(如config.json):
    { "logLevel": "debug" }
    
    代碼中讀?。?pre class="hljs">const config = require('./config.json'); const logger = winston.createLogger({ level: config.logLevel });

3. 實現日志輪轉

防止日志文件過大占用磁盤空間,可使用Winston插件Ubuntu系統工具

  • Winston-daily-rotate-file(推薦):按天分割日志文件,支持壓縮和保留天數設置。
    安裝:
    npm install winston-daily-rotate-file
    
    配置:
    const { createLogger, format, transports } = require('winston');
    const DailyRotateFile = require('winston-daily-rotate-file');
    
    const logger = createLogger({
      level: 'info',
      format: format.combine(format.timestamp(), format.json()),
      transports: [
        new DailyRotateFile({
          filename: '/var/log/nodejs/app-%DATE%.log', // 日志路徑(帶日期后綴)
          datePattern: 'YYYY-MM-DD', // 按天分割
          zippedArchive: true, // 壓縮舊日志
          maxSize: '20m', // 單個文件最大20MB
          maxFiles: '14d' // 保留14天
        }),
        new DailyRotateFile({
          filename: '/var/log/nodejs/app-error-%DATE%.log',
          datePattern: 'YYYY-MM-DD',
          level: 'error', // 僅記錄error級別日志
          zippedArchive: true,
          maxFiles: '30d'
        })
      ]
    });
    
  • Ubuntu Logrotate:系統級日志輪轉工具,適用于所有日志文件。
    創建配置文件/etc/logrotate.d/nodejs
    /var/log/nodejs/*.log {
      daily
      rotate 7
      missingok
      notifempty
      compress
      delaycompress
      sharedscripts
      postrotate
        systemctl restart your-node-app.service # 可選:重啟應用以釋放文件句柄
      endscript
    }
    

4. 結構化日志輸出

采用JSON格式記錄日志,便于后續用ELK(Elasticsearch+Logstash+Kibana)、Graylog等工具分析。
Winston示例:

const logger = winston.createLogger({
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加時間戳
    format.json() // 輸出JSON
  ),
  transports: [new transports.Console(), new transports.File({ filename: 'combined.log' })]
});

日志輸出示例:

{
  "timestamp": "2025-10-09 10:00:00",
  "level": "info",
  "message": "Application started"
}

5. 異步日志記錄

確保日志記錄不阻塞主線程,提升應用性能。Winston、Pino等庫均默認支持異步,無需額外配置。

6. 集成進程管理工具(如PM2)

使用PM2管理Node.js進程時,可借助其內置日志功能:

  • 自動管理日志:PM2會自動聚合多進程日志,支持日志輪轉;
  • 配置日志級別:通過ecosystem.config.js設置:
    module.exports = {
      apps: [{
        name: 'my-app',
        script: 'app.js',
        env: {
          NODE_ENV: 'production',
          LOG_LEVEL: 'info'
        },
        log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志時間格式
        merge_logs: true // 合并多進程日志
      }]
    };
    
    啟動應用:
    pm2 start ecosystem.config.js --env production
    

7. 監控與警報

集成監控工具實時分析日志,設置警報規則:

  • Prometheus+Grafana:通過日志采集器(如Loki)收集日志,可視化日志指標(如錯誤率);
  • Sentry:捕獲應用異常日志,發送郵件/Slack警報;
  • 自定義腳本:用cron定時分析日志文件,如統計錯誤次數超過閾值時發送郵件。

8. 日志安全與權限管理

  • 限制日志文件權限:確保只有授權用戶可訪問日志文件:
    sudo chown -R root:adm /var/log/nodejs/
    sudo chmod -R 640 /var/log/nodejs/*.log
    
  • 避免敏感信息泄露:代碼中不要記錄密碼、密鑰等敏感信息,可使用winston-mask等庫自動屏蔽敏感字段。

通過以上步驟,可在Ubuntu系統上為Node.js應用構建一個高效、可維護、安全的日志記錄策略,滿足不同環境的監控與分析需求。

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