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

相关推荐
Wx-bishekaifayuan43 分钟前
springboot房屋租赁系统11574-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·sql·spring·课程设计
青山木1 小时前
秒杀系统设计(二):数据正确性——防超卖、分布式锁与一人一单
分布式·后端·mysql·中间件·架构
KING-WU5121 小时前
Linux 工具之 yum、vim、gcc
linux·运维·服务器·后端
蜗牛互联网1 小时前
GPT-6.1 Sol迁移指南:从token单价转向每任务成本门禁
java·人工智能·后端·gpt
IT_陈寒1 小时前
Redis键过期失效?这个坑我踩得明明白白
前端·人工智能·后端
蜗牛互联网2 小时前
HSTU在Dynamo-Triton中的AOTI与KV缓存验收方法
java·人工智能·后端·缓存
青山木2 小时前
秒杀系统设计(一):需求拆解与流量治理
java·数据库·redis·后端·架构
沫璃染墨2 小时前
《从零入门Linux系统篇(五十三):线程篇·六——线程互斥详解:从并发问题到mutex互斥锁》
linux·运维·服务器·开发语言·后端·架构·系统架构
魏码不凡2 小时前
Go 编译报错:undefined: webp.Encode 问题排查与解决
开发语言·后端·golang
tachibana24 小时前
与其他语言相比,使用 Go 有什么好处?
开发语言·后端·golang·go