From 077d48c7f0d5d7c888fef4d74b655eec5b027e63 Mon Sep 17 00:00:00 2001 From: asif Date: Fri, 29 Aug 2025 15:40:11 +0530 Subject: [PATCH] added logger for logging all kinds of requests with headers, body, ip and other data --- src/app.js | 22 +++++++++++++++++++++- src/util/logger.js | 25 +++++++++++++++++++++---- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/app.js b/src/app.js index 3c86b46..42b45f6 100644 --- a/src/app.js +++ b/src/app.js @@ -1,6 +1,6 @@ const express = require('express'); const cors = require('cors'); -const { logger } = require('./util/logger'); +const { logger, requestLogger } = require('./util/logger'); const routes = require('./routes'); const app = express(); @@ -9,6 +9,26 @@ app.use(cors()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); +app.use((req, res, next) => { + const start = Date.now(); + + res.on('finish', () => { + requestLogger.info( + { + ip: req.ip || req.connection.remoteAddress, + method: req.method, + url: req.originalUrl, + headers: req.headers, + body: req.body, + status: res.statusCode, + responseTime: `${Date.now() - start}ms`, + }, + 'Incoming request' + ); + }); + next(); +}); + app.use('/api', routes); app.get('/health', (_, res) => res.send('server is healthy')); app.use((err, _req, res, _next) => { diff --git a/src/util/logger.js b/src/util/logger.js index eb033b0..4b6d33a 100644 --- a/src/util/logger.js +++ b/src/util/logger.js @@ -1,6 +1,19 @@ const pino = require('pino'); +const fs = require('fs'); +const path = require('path'); + const isDev = process.env.NODE_ENV !== 'production'; +const logDir = path.join(__dirname, 'logs'); +if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir); +} + +const requestLoggerStream = pino.destination({ + dest: path.join(logDir, 'requests.log'), + sync: false, +}); + const logger = pino({ transport: isDev ? { @@ -15,8 +28,12 @@ const logger = pino({ level: isDev ? 'debug' : 'info', }); -const requestLogger = (req, _res, next) => { - logger.info(`${req.method} ${req.url}`); - next(); -}; +const requestLogger = pino( + { + level: 'info', + base: null, + }, + requestLoggerStream +); + module.exports = { logger, requestLogger };