溫馨提示×

怎樣自定義Ubuntu JS日志格式

小樊
48
2025-10-09 10:28:38
欄目: 編程語言

怎樣自定義Ubuntu JS日志格式
在Ubuntu系統中,自定義JavaScript(Node.js)應用程序的日志格式主要通過第三方日志庫(如Winston、Morgan)實現,也可直接通過代碼手動配置。以下是具體方法:

1. 使用Winston庫(推薦,適用于大多數場景)

Winston是Node.js最流行的日志庫之一,支持時間戳、日志級別、自定義消息格式、多傳輸目標(控制臺、文件、數據庫等),功能強大且靈活。

  • 安裝Winston:在項目目錄下運行npm install winston。
  • 配置自定義格式:創建logger.js文件,通過winston.format.combine組合多個格式化器(如時間戳、消息模板),并通過transports指定日志輸出位置(控制臺、文件)。示例如下:
    const { createLogger, format, transports } = require('winston');
    const logger = createLogger({
      level: 'info', // 設置最低日志級別(info及以上會輸出)
      format: format.combine(
        format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加時間戳(格式可自定義)
        format.printf(({ timestamp, level, message }) => { // 自定義日志輸出模板
          return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
        })
      ),
      transports: [
        new transports.Console(), // 輸出到控制臺
        new transports.File({ filename: 'logs/error.log', level: 'error' }), // 錯誤日志單獨存文件
        new transports.File({ filename: 'logs/combined.log' }) // 所有日志存合并文件
      ]
    });
    module.exports = logger;
    
  • 在應用中使用:引入配置好的logger,調用對應方法記錄日志(如logger.info('Hello, world.')、logger.error('Something went wrong.'))。運行應用后,日志將按自定義格式輸出到控制臺和指定文件。

2. 使用Morgan庫(適用于Express.js HTTP請求日志)

若你的應用基于Express.js框架,可使用Morgan中間件快速記錄HTTP請求日志(如請求方法、URL、狀態碼、響應時間),并自定義格式。

  • 安裝Morgan:運行npm install morgan。
  • 配置自定義格式:在Express應用中,通過morgan.token定義自定義token(如請求路徑、狀態碼),再用morgan函數生成自定義格式字符串。示例如下:
    const express = require('express');
    const morgan = require('morgan');
    const app = express();
    
    // 定義自定義token(獲取請求方法、URL、狀態碼)
    morgan.token('customFormat', (req, res) => {
      return `${req.method} ${req.originalUrl} - ${res.statusCode}`;
    });
    
    // 使用自定義格式(格式為:方法 URL - 狀態碼)
    app.use(morgan(':customFormat'));
    
    // 示例路由
    app.get('/', (req, res) => {
      res.send('Hello, world!');
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    
  • 效果:訪問http://localhost:3000時,控制臺將輸出類似GET / - 200的日志(表示GET請求、路徑/、狀態碼200)。

3. 直接通過代碼手動配置(適合小型/快速原型)

若不想引入第三方庫,可通過Node.js內置的fs模塊手動寫入日志文件,實現簡單的格式化(時間戳+日志級別+消息)。

  • 配置代碼:創建logger.js文件,定義log函數,拼接時間戳、日志級別和消息,寫入文件。示例如下:
    const fs = require('fs');
    const path = require('path');
    
    // 創建日志文件流(追加模式)
    const logStream = fs.createWriteStream(path.join(__dirname, 'logs/combined.log'), { flags: 'a' });
    
    // 自定義log函數
    function log(level, message) {
      const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19); // 格式:YYYY-MM-DD HH:mm:ss
      const logEntry = `[${timestamp}] ${level.toUpperCase()}: ${message}\n`; // 拼接日志條目
      logStream.write(logEntry); // 寫入文件
      console.log(logEntry.trim()); // 同時輸出到控制臺(可選)
    }
    
    module.exports = { log };
    
  • 在應用中使用:引入log函數,調用時傳入日志級別(如info、error)和消息(如log('info', 'Application started.')、log('error', 'Database connection failed.'))。日志將寫入logs/combined.log文件和控制臺。

注意事項

  • 日志輪轉:若日志文件過大,建議使用winston-daily-rotate-file等庫實現按日期/大小分割日志,避免單個文件過大。
  • 環境適配:通過環境變量(如process.env.NODE_ENV)控制日志級別(開發環境用debug,生產環境用info/error),提高日志管理的靈活性。
  • 系統級日志:若需將日志集成到Ubuntu系統日志(如journalctl),可使用winston-systemd等庫,或配置rsyslog(編輯/etc/rsyslog.conf),但這屬于系統級配置,非JS應用本身的日志格式自定義。

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