linux

Node.js日志中异常请求识别方法

小樊
54
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
看了该问题的人还看了