debian

Debian Node.js 日志中如何追踪请求处理时间

小樊
38
2025-07-15 14:20:30
栏目: 编程语言

在 Debian 系统上,使用 Node.js 追踪请求处理时间可以通过多种方法实现。以下介绍几种常用的方法,包括使用内置的 console.time、集成日志库(如 winstonmorgan)、以及使用性能监控工具(如 New RelicDatadog)。根据具体需求选择合适的方法。

方法一:使用 Node.js 内置的 console.time

这是最简单的方法,适用于开发和调试阶段。

示例代码

const http = require('http');

const server = http.createServer((req, res) => {
  const start = Date.now();

  // 模拟请求处理
  setTimeout(() => {
    res.end('Hello World\n');
  }, 150); // 假设处理时间为150ms

  // 请求结束后计算并打印处理时间
  req.on('end', () => {
    const duration = Date.now() - start;
    console.log(`请求处理时间: ${duration}ms`);
  });
});

server.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000/');
});

说明

方法二:使用中间件记录请求处理时间(适用于 Express 应用)

如果你使用的是 Express 框架,可以编写一个中间件来记录每个请求的处理时间。

安装 Express

如果尚未安装 Express:

npm install express

示例代码

const express = require('express');
const app = express();

// 自定义中间件记录请求处理时间
app.use((req, res, next) => {
  const start = Date.now();

  // 监听响应结束事件
  res.on('finish', () => {
    const duration = Date.now() - start;
    console.log(`${req.method} ${req.url} - ${duration}ms`);
  });

  next();
});

// 示例路由
app.get('/', (req, res) => {
  // 模拟异步操作
  setTimeout(() => {
    res.send('Hello World!');
  }, 200);
});

app.listen(3000, () => {
  console.log('Express 服务器运行在 http://localhost:3000/');
});

说明

方法三:使用日志库(如 Winston)

winston 是一个功能强大的日志库,可以更灵活地记录和管理日志。

安装 Winston

npm install winston

示例代码

const express = require('express');
const winston = require('winston');

// 配置 Winston 日志
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.printf(({ timestamp, level, message }) => {
      return `${timestamp} ${level}: ${message}`;
    })
  ),
  transports: [
    new winston.transports.Console(),
    // 可以添加文件传输等其他传输方式
    // new winston.transports.File({ filename: 'logs/app.log' })
  ],
});

const app = express();

// 自定义中间件记录请求处理时间
app.use((req, res, next) => {
  const start = Date.now();

  res.on('finish', () => {
    const duration = Date.now() - start;
    logger.info(`${req.method} ${req.url} - ${duration}ms`);
  });

  next();
});

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

app.listen(3000, () => {
  logger.info('Express 服务器运行在 http://localhost:3000/');
});

说明

方法四:使用性能监控工具

对于生产环境,建议使用专业的性能监控工具来追踪请求处理时间。这些工具提供更丰富的功能和可视化界面。

1. New Relic

New Relic 是一个广泛使用的应用性能监控(APM)工具。

步骤:

  1. 注册并创建应用:访问 New Relic 注册账号,并创建一个新的应用。

  2. 安装 New Relic Node.js Agent

    npm install newrelic
    
  3. 配置应用

    在应用的入口文件(如 app.js)顶部添加以下代码:

    const newrelic = require('newrelic');
    
  4. 启动应用

    node app.js
    
  5. 查看监控数据:登录 New Relic 控制台,查看应用的性能指标和请求处理时间。

2. Datadog

Datadog 是另一个强大的监控和分析平台。

步骤:

  1. 注册并创建应用:访问 Datadog 注册账号,并创建一个新的应用。

  2. 安装 Datadog Agent 和 Node.js 插件

    按照 Datadog 官方文档 配置 Datadog Agent 和 Node.js 插件。

  3. 在应用中集成 Datadog

    const datadog = require('datadog-rum');
    datadog.initialize({
      applicationId: 'YOUR_APPLICATION_ID',
      clientToken: 'YOUR_CLIENT_TOKEN',
      site: 'datadoghq.com', // 或者 'datadoghq.eu' 等
    });
    
  4. 启动应用

    node app.js
    
  5. 查看监控数据:登录 Datadog 控制台,查看应用的性能指标和请求处理时间。

说明

方法五:使用 morgan 日志中间件结合自定义格式

morgan 是一个流行的 HTTP 请求日志中间件,可以与自定义格式结合来记录请求处理时间。

安装 Morgan

npm install morgan

示例代码

const express = require('express');
const morgan = require('morgan');
const app = express();

// 自定义 Morgan 格式,添加响应时间
morgan.token('response-time', (req, res) => {
  return `${res.responseTime}ms`;
});

app.use(morgan(':method :url :status :response-time :res[content-length] - :response-time ms'));

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

app.listen(3000, () => {
  console.log('Express 服务器运行在 http://localhost:3000/');
});

说明

总结

根据应用的需求和复杂程度,可以选择不同的方法来追踪请求处理时间:

选择合适的方法,有助于优化应用性能,及时发现并解决潜在的问题。

0
看了该问题的人还看了