feat: 实现统一日志系统和维护模式功能
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* HTTP 请求日志中间件
|
||||
* 为每个请求生成唯一 ID,记录请求/响应信息
|
||||
*/
|
||||
|
||||
const logger = require('../utils/logger');
|
||||
const crypto = require('crypto');
|
||||
|
||||
/**
|
||||
* 请求日志中间件
|
||||
* 记录每个 HTTP 请求的方法、URL、状态码、耗时、用户ID 等信息
|
||||
*/
|
||||
const requestLogger = (req, res, next) => {
|
||||
const requestId = crypto.randomBytes(4).toString('hex');
|
||||
const startTime = Date.now();
|
||||
|
||||
req.requestId = requestId;
|
||||
|
||||
res.on('finish', () => {
|
||||
const duration = Date.now() - startTime;
|
||||
const level = res.statusCode >= 500 ? 'error'
|
||||
: res.statusCode >= 400 ? 'warn' : 'debug';
|
||||
|
||||
logger[level](`${req.method} ${req.originalUrl}`, {
|
||||
module: 'HTTP',
|
||||
requestId,
|
||||
method: req.method,
|
||||
url: req.originalUrl,
|
||||
statusCode: res.statusCode,
|
||||
duration: `${duration}ms`,
|
||||
ip: req.ip || req.connection.remoteAddress,
|
||||
userAgent: req.get('User-Agent'),
|
||||
userId: req.user?.userId || null,
|
||||
});
|
||||
});
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
module.exports = requestLogger;
|
||||
Reference in New Issue
Block a user