From 41c4d5e8f230287baa095e88ad126a678b7de217 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:37:19 +0700 Subject: [PATCH] feat: add log middleware --- src/middlewares/log.ts | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/middlewares/log.ts diff --git a/src/middlewares/log.ts b/src/middlewares/log.ts new file mode 100644 index 0000000..26c85bd --- /dev/null +++ b/src/middlewares/log.ts @@ -0,0 +1,62 @@ +import { NextFunction, Request, Response } from "express"; +import elasticsearch from "../services/elasticsearch"; + +if (!process.env.ELASTICSEARCH_INDEX) { + throw new Error("Require ELASTICSEARCH_INDEX to store log."); +} + +const ELASTICSEARCH_INDEX = process.env.ELASTICSEARCH_INDEX; + +async function logMiddleware(req: Request, res: Response, next: NextFunction) { + if (!req.url.startsWith("/api")) return next(); + + let data: any; + + const originalJson = res.json; + + res.json = function (v: any) { + data = v; + return originalJson.call(this, v); + }; + + const timestamp = new Date().toString(); + const start = performance.now(); + + req.app.locals.logData = {}; + + res.on("finish", () => { + const obj = { + systemName: "JWS-SOS", + startTimeStamp: timestamp, + endTimeStamp: new Date().toString(), + processTime: performance.now() - start, + host: req.hostname, + sessionId: req.headers["x-session-id"], + rtId: req.headers["x-rtid"], + tId: req.headers["x-tid"], + method: req.method, + endpoint: req.url, + responseCode: res.statusCode, + responseDescription: + data.devMessage !== undefined + ? data.devMessage + : { 200: "success", 201: "created_success", 204: "no_content", 304: "success" }[ + res.statusCode + ], + input: req.body, + output: data, + ...req.app.locals.logData, + }; + + console.log(obj); + + elasticsearch.index({ + index: ELASTICSEARCH_INDEX, + document: obj, + }); + }); + + return next(); +} + +export default logMiddleware;