溫馨提示×

Node.js日志中異常請求識別方法

小樊
51
2025-08-30 12:48:41
欄目: 編程語言

在Node.js中,可以使用中間件來識別和處理異常請求。以下是一個使用Express框架的示例,展示了如何創建一個中間件來捕獲和記錄異常請求:

  1. 首先,確保已經安裝了Express和Morgan(用于記錄HTTP請求):
npm install express morgan
  1. 創建一個名為app.js的文件,并添加以下代碼:
const express = require('express');
const morgan = require('morgan');
const fs = require('fs');
const path = require('path');

const app = express();

// 創建一個寫入流,用于將日志寫入文件
const accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' });

// 使用Morgan中間件記錄HTTP請求
app.use(morgan('combined', { stream: accessLogStream }));

// 自定義異常請求中間件
app.use((err, req, res, next) => {
  console.error('Exception caught:', err);

  // 記錄異常請求的信息
  const status = err.status || 500;
  const message = err.message || 'Internal Server Error';
  const stackTrace = err.stack || '';

  const logEntry = `[${new Date().toISOString()}] [${status}] [${req.method}] ${req.url} - ${message}\n${stackTrace}\n`;

  // 將異常請求的信息寫入日志文件
  accessLogStream.write(logEntry);

  // 返回錯誤響應
  res.status(status).json({ message: message });
});

// 示例路由,用于觸發異常
app.get('/error', (req, res, next) => {
  try {
    throw new Error('This is an error');
  } catch (err) {
    next(err);
  }
});

// 啟動服務器
const port = 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

在這個示例中,我們創建了一個自定義的異常請求中間件,它捕獲并記錄異常請求的信息,包括請求方法、URL、狀態碼、錯誤消息和堆棧跟蹤。然后,我們創建了一個示例路由/error,用于觸發異常。

當訪問/error路由時,異常請求中間件會捕獲異常,并將相關信息記錄到access.log文件中。同時,服務器會返回一個包含錯誤消息的JSON響應。

要運行此示例,請在終端中執行以下命令:

node app.js

然后訪問http://localhost:3000/error,查看日志文件access.log以獲取異常請求的詳細信息。

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