用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 这种成熟库。但对于调试和小项目,这个方案够用了。

相关推荐
东风破_7 小时前
从输入 juejin.cn 到看到页面:DNS、Nginx、服务器集群与 CDN 到底在做什么?
后端·mysql
东风破_7 小时前
从 0 设计一个博客数据库:用户、头像与文章表应该怎么建?
后端·mysql
大鸡腿同学7 小时前
黄仁勋点透的 AI 真相:能实现你知道但做不到的,却实现不了你不知道的
后端
FfHUCisI8 小时前
Go 编译过程全景
开发语言·后端·golang
FfHUCisI8 小时前
Golang 语法分析与 AST:Parser 与 go/ast
开发语言·后端·golang
++==10 小时前
RESTful详解:核心思想、框架、与HTTP的区别,API的设计风格
后端·http·restful
IT_陈寒11 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
向生12 小时前
Ubuntu Caddy 保姆级完整教程
后端
tntxia12 小时前
Docker权限的问题
后端
明月_清风12 小时前
看完这段关于"全插件化架构"的技术分析后,我整理了一份笔记
前端·后端