溫馨提示×

Ubuntu中Node.js日志如何存儲

小樊
50
2025-09-28 22:50:12
欄目: 云計算

Ubuntu中Node.js日志存儲的常見方法及路徑

1. 控制臺輸出(開發調試默認方式)

Node.js內置的console模塊(console.log()、console.error()等)默認將日志輸出到應用程序運行的控制臺(終端)。若通過SSH連接服務器,可直接查看實時日志;若將應用放到后臺運行(如node app.js &),日志會保留在當前終端會話中,但關閉會話后日志會丟失。

2. 文件日志(基礎持久化方式)

通過Node.js的fs模塊或第三方日志庫(如winston、bunyan)將日志寫入指定文件,實現持久化存儲。

  • 原生fs模塊:使用createWriteStream創建可寫流,追加日志到文件。
    const fs = require('fs');
    const logFile = fs.createWriteStream('./logs/app.log', { flags: 'a' }); // 'a'表示追加模式
    global.console = new console.Console(logFile, logFile); // 重定向console輸出到文件
    console.log('This log will be saved to app.log');
    
  • 第三方日志庫(以winston為例):支持多傳輸方式(文件、控制臺、JSON格式等),更靈活。
    const winston = require('winston');
    const logger = winston.createLogger({
      level: 'info',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({ filename: './logs/error.log', level: 'error' }), // 錯誤日志單獨存儲
        new winston.transports.File({ filename: './logs/combined.log' }), // 所有日志合并
        new winston.transports.Console() // 同時輸出到控制臺(開發環境推薦)
      ]
    });
    logger.info('Server started on port 3000');
    
    上述配置會將錯誤日志寫入./logs/error.log,所有日志寫入./logs/combined.log。

3. 系統日志(集成系統日志服務)

通過syslog模塊將Node.js日志發送到Ubuntu的系統日志服務(rsyslog),統一管理應用日志。

  • 代碼配置:使用syslog模塊發送日志到系統日志。
    const syslog = require('syslog');
    syslog.openlog('my-node-app', { facility: 'local0' }); // 'local0'為自定義設施(facility)
    syslog.syslog('info', 'Application started successfully'); // 發送info級別日志
    syslog.closelog();
    
  • rsyslog配置:編輯/etc/rsyslog.d/50-default.conf(或新建.conf文件),添加以下內容捕獲local0設施的日志:
    local0.* /var/log/my-node-app.log // 將local0設施的所有日志寫入/var/log/my-node-app.log
    
    重啟rsyslog服務使配置生效:
    sudo systemctl restart rsyslog
    
    日志將存儲在/var/log/my-node-app.log中。

4. 第三方進程管理器(PM2,推薦生產使用)

PM2是Node.js常用的進程管理工具,可自動管理應用日志(包括標準輸出、錯誤輸出),支持日志輪轉、實時查看等功能。

  • 安裝與啟動
    sudo npm install pm2 -g // 全局安裝PM2
    pm2 start app.js --name my-app // 啟動應用并命名為"my-app"
    
  • 日志查看
    pm2 logs my-app // 實時查看應用日志(包含stdout和stderr)
    pm2 logs my-app --lines 100 // 查看最近100行日志
    
  • 日志存儲位置:PM2默認將日志存儲在用戶主目錄的.pm2/logs/文件夾下,文件名為<app-name>-out.log(標準輸出)和<app-name>-err.log(錯誤輸出)。例如:
    ~/.pm2/logs/my-app-out.log
    ~/.pm2/logs/my-app-err.log
    
  • 日志輪轉:PM2內置日志輪轉功能,可通過pm2 set pm2:logrotate:max_size 10M設置單個日志文件最大大?。ㄈ?0MB),超過后會自動壓縮并創建新文件。

5. 日志輪轉(防止磁盤空間耗盡)

當日志文件過大時,需通過日志輪轉工具(如logrotate)壓縮、刪除舊日志,釋放空間。

  • 配置logrotate:創建/etc/logrotate.d/nodejs文件,添加以下內容:
    /var/log/nodejs/*.log { // 匹配/var/log/nodejs目錄下的所有.log文件
      daily // 每天輪轉一次
      missingok // 若日志文件不存在也不報錯
      rotate 7 // 保留最近7天的日志
      compress // 壓縮舊日志(如.gz格式)
      notifempty // 若日志為空則不輪轉
      create 0640 root adm // 創建新日志文件時設置權限和所有者
    }
    
    該配置會自動管理/var/log/nodejs/目錄下的日志文件,保留7天內的壓縮日志。

6. 集中式日志管理(ELK Stack,生產高級需求)

對于需要集中管理、搜索、分析日志的生產環境,可使用ELK Stack(Elasticsearch + Logstash + Kibana):

  • 配置步驟
    1. 安裝ELK組件:在Ubuntu上安裝Elasticsearch、Logstash、Kibana。
    2. 配置Logstash接收Node.js日志:編輯Logstash的input配置,監聽Node.js應用的日志文件(如/var/log/myapp.log)。
    3. Node.js應用發送日志到Logstash:使用winston-logstash等庫將日志發送到Logstash。
      const winston = require('winston');
      const winstonLogstash = require('winston-logstash');
      const logger = winston.createLogger({
        transports: [
          new winstonLogstash({
            port: 5000, // Logstash監聽的端口
            host: 'localhost' // Logstash服務器地址
          })
        ]
      });
      
    4. 通過Kibana可視化日志:啟動Kibana后,在瀏覽器中訪問http://localhost:5601,配置索引模式即可搜索、分析日志。

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