chore: better request/response logging apiv2 (#17210)

* chore: better request/response logging apiv2

* fixup! chore: better request/response logging apiv2
This commit is contained in:
Morgan
2024-10-21 08:19:31 +00:00
committed by GitHub
parent 995bf09dde
commit 3999f84eff
2 changed files with 45 additions and 4 deletions
@@ -1,8 +1,11 @@
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from "@nestjs/common";
import { CallHandler, ExecutionContext, Injectable, NestInterceptor, Logger } from "@nestjs/common";
import { Request, Response } from "express";
import { tap } from "rxjs/operators";
@Injectable()
export class ResponseInterceptor implements NestInterceptor {
private readonly logger = new Logger("ResponseInterceptor - NestInterceptor");
intercept(context: ExecutionContext, next: CallHandler) {
const ctx = context.switchToHttp();
const request = ctx.getRequest<Request>();
@@ -10,7 +13,28 @@ export class ResponseInterceptor implements NestInterceptor {
const requestId = request.headers["X-Request-Id"] ?? "unknown-request-id";
response.setHeader("X-Request-Id", requestId.toString());
const { method, url } = request;
const startTime = Date.now();
return next.handle();
return next.handle().pipe(
tap((data) => {
const { statusCode } = response;
const responseTime = Date.now() - startTime;
// Log response in JSON format
this.logger.log(
JSON.stringify({
requestId,
method,
url,
statusCode,
responseTime,
responseBody: data,
timestamp: new Date().toISOString(),
message: "Outgoing Response",
})
);
})
);
}
}
@@ -1,11 +1,28 @@
import { Injectable, NestMiddleware } from "@nestjs/common";
import { Injectable, NestMiddleware, Logger } from "@nestjs/common";
import { Request, Response, NextFunction } from "express";
import { v4 as uuid } from "uuid";
@Injectable()
export class RequestIdMiddleware implements NestMiddleware {
private readonly logger = new Logger("RequestIdMiddleware - NestMiddleware");
use(req: Request, res: Response, next: NextFunction) {
req.headers["X-Request-Id"] = uuid();
const requestId = uuid();
req.headers["X-Request-Id"] = requestId;
const { method, headers, body: requestBody, baseUrl } = req;
this.logger.log(
JSON.stringify({
requestId,
method,
url: baseUrl,
headers,
requestBody,
timestamp: new Date().toISOString(),
message: "Incoming Request",
})
);
next();
}
}