用Node.js写一个简单的API请求日志中间件

用Node.js写一个简单的API请求日志中间件

最近在优化后端服务,需要记录每次API请求的耗时和状态码,写了一个轻量的中间件,分享出来。

思路

在 Express/Koa 的请求生命周期中插入一个中间件,记录:

  • 请求方法和路径
  • 响应状态码
  • 请求耗时(毫秒)
  • 请求时间戳

代码

javascript 复制代码
function requestLogger(req, res, next) {
  const start = Date.now();
  const { method, path } = req;

  res.on('finish', () => {
    const duration = Date.now() - start;
    const status = res.statusCode;
    const timestamp = new Date().toISOString();

    console.log(`[${timestamp}] ${method} ${path} ${status} ${duration}ms`);
  });

  next();
}

使用方式

Express 中直接挂载:

javascript 复制代码
const express = require('express');
const app = express();

app.use(requestLogger);

app.get('/api/test', (req, res) => {
  res.json({ ok: true });
});

app.listen(3000);

访问 localhost:3000/api/test,控制台输出:

bash 复制代码
[2026-07-01T03:00:00.000Z] GET /api/test 200 3ms

进阶:写入文件

如果需要持久化,可以用 fs.appendFile 写入日志文件:

javascript 复制代码
const fs = require('fs');

function fileLogger(req, res, next) {
  const start = Date.now();
  const { method, path } = req;

  res.on('finish', () => {
    const duration = Date.now() - start;
    const status = res.statusCode;
    const timestamp = new Date().toISOString();
    const line = `[${timestamp}] ${method} ${path} ${status} ${duration}ms\n`;

    fs.appendFile('access.log', line, (err) => {
      if (err) console.error('日志写入失败', err);
    });
  });

  next();
}

小结

这个中间件很轻量,生产环境建议用 winston 或 pino 这种成熟库。但对于调试和小项目,这个方案够用了。

相关推荐
用户8358086187911 小时前
Go 高并发下的“内存刺客“:自研 Size-Class 无锁对象池,把 sync.Pool 的 P99 从 128μs 压到 41μs
后端
货拉拉技术1 小时前
资损下降 99.96% 的背后— AI 资损防控平台实战
后端
山水洛行3 小时前
AI Agent 智能体记忆:从检索到被治理的数据系统
后端
卷无止境3 小时前
C++20 的概念与约束:让模板编程终于"说人话"
后端
Ai拆代码的曹操3 小时前
一次排查三种连接泄漏模式,再也不怕 HikariCP 连接池爆满了
后端
咪库咪库咪3 小时前
Cypher入门
后端
雪隐4 小时前
个人电脑玩AI-08让5060 Ti给你打工——我拿 Unlimited-OCR扫了 600 页书,然后悟了
人工智能·后端
AskHarries4 小时前
用 OpenClaw 做一份完整 PPT:从主题、提纲到 slide deck
后端·程序员