debian

Node.js日志中HTTP请求如何追踪

小樊
45
2025-05-09 19:08:29
栏目: 编程语言

在Node.js中,可以使用中间件来追踪HTTP请求。这里以Express框架为例,介绍如何使用morganwinston两个库来实现HTTP请求的追踪。

  1. 首先,确保已经安装了Express框架。如果没有,请运行以下命令安装:
npm install express
  1. 安装morganwinston库:
npm install morgan winston
  1. 创建一个名为logger.js的文件,用于配置winston日志记录器:
const { createLogger, format, transports } = require('winston');

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp(),
    format.printf(({ timestamp, level, message }) => {
      return `${timestamp} ${level}: ${message}`;
    })
  ),
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'logs/http.log' }),
  ],
});

module.exports = logger;
  1. 在主应用文件(如app.js)中,引入Express、morgan和logger,并配置中间件:
const express = require('express');
const morgan = require('morgan');
const logger = require('./logger');

const app = express();

// 配置morgan日志格式
morgan.token('custom', (req, res) => {
  return JSON.stringify({
    url: req.url,
    method: req.method,
    status: res.statusCode,
    responseTime: res.responseTime,
  });
});

// 使用morgan中间件
app.use(
  morgan('custom', {
    stream: {
      write: (message) => {
        logger.info(message.trim());
      },
    },
  })
);

// 示例路由
app.get('/', (req, res) => {
  res.send('Hello World!');
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

现在,每当有HTTP请求发生时,都会在控制台和logs/http.log文件中记录相关信息。这些信息包括请求的URL、HTTP方法、状态码和响应时间等,有助于追踪和分析HTTP请求。

0
看了该问题的人还看了