Skip to content

Commit 0ad6543

Browse files
feat: add request logging middleware and enhance logging configuration; update environment variable requirements
1 parent fd7355f commit 0ad6543

7 files changed

Lines changed: 54 additions & 3 deletions

File tree

logs/combined.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@
44
{"level":"info","message":"Database connection successful","timestamp":"2026-03-26T14:00:37.010Z"}
55
{"level":"info","message":"Server listens","port":"9999","timestamp":"2026-03-26T14:00:37.014Z"}
66
{"level":"warn","message":"Unauthorized","method":"GET","path":"/messages/does-not-exist","statusCode":401,"timestamp":"2026-03-26T14:01:11.022Z"}
7+
{"level":"info","message":"Database connection successful","timestamp":"2026-03-26T14:14:34.117Z"}
8+
{"level":"info","message":"Server listens","port":"9999","timestamp":"2026-03-26T14:14:34.121Z"}

src/app.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const config = require("./config/index")
1111
const errorHandler = require("./middlewares/errorMiddleware")
1212
const AppError = require("./utils/AppError")
1313
const logger = require("./utils/logger")
14+
const requestLogger = require("./middlewares/requestLogger")
1415

1516
const allowedOrigins = [
1617
"http://localhost:5173",
@@ -29,7 +30,6 @@ const limiter = rateLimit({
2930

3031
app.use(express.json({ limit: '100mb' }))
3132
app.use(express.urlencoded({ limit: '100mb', extended: true }))
32-
app.use(express.raw({ limit: '100mb' }))
3333
app.use(cookieParser())
3434

3535

@@ -44,6 +44,8 @@ app.use(cors({
4444
credentials: true
4545
}))
4646

47+
app.use(requestLogger);
48+
4749
initializeSocket(server);
4850

4951
const connectDb = require("./database/connection")
File renamed without changes.

src/config/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const requiredEnv = [
1717
"CLOUDINARY_API_SECRET",
1818
"RAZORPAY_KEYID",
1919
"RAZORPAY_KEY_SECRET",
20+
"RAZORPAY_WEBHOOK_SECRET",
2021
"SMTP_HOST",
2122
"SMTP_PORT",
2223
"SMTP_USER",

src/middlewares/requestLogger.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const logger = require("../utils/logger");
2+
3+
const requestLogger = (req, res, next) => {
4+
const startMs = Date.now();
5+
6+
// Avoid noisy logs for preflight requests unless debugging
7+
const shouldLog = req.method !== "OPTIONS";
8+
9+
res.on("finish", () => {
10+
if (!shouldLog) return;
11+
12+
const durationMs = Date.now() - startMs;
13+
const statusCode = res.statusCode;
14+
15+
// Prefer forwarded-for if present (behind proxies/load balancers)
16+
const forwardedFor = req.headers["x-forwarded-for"];
17+
const ip = Array.isArray(forwardedFor)
18+
? forwardedFor[0]
19+
: (forwardedFor ? String(forwardedFor).split(",")[0].trim() : req.ip);
20+
21+
const meta = {
22+
method: req.method,
23+
path: req.originalUrl,
24+
statusCode,
25+
durationMs,
26+
ip,
27+
};
28+
29+
// If auth middleware has populated req.user, include it
30+
if (req.user?._id) {
31+
meta.userId = String(req.user._id);
32+
}
33+
34+
// Keep request logging minimal; detailed error logging happens in error middleware
35+
if (statusCode >= 400) {
36+
logger.debug("Request completed", meta);
37+
} else {
38+
logger.info("Request completed", meta);
39+
}
40+
});
41+
42+
next();
43+
};
44+
45+
module.exports = requestLogger;

src/routes/payment.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const express = require("express");
22
const { userAuth } = require("../middlewares/auth");
33
const instance = require("../integrations/razorpay");
44
const paymentRouter = express.Router();
5-
const membershipType = require("../costants");
5+
const membershipType = require("../config/costants");
66
const Payment = require("../models/Payment");
77
const {validateWebhookSignature} = require("razorpay/dist/utils/razorpay-utils");
88
const User = require("../models/user");

src/utils/logger.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
const fs = require("fs");
22
const path = require("path");
33
const { createLogger, format, transports } = require("winston");
4+
const config = require("../config/index")
45

56
const logsDir = path.resolve(process.cwd(), "logs");
67
if (!fs.existsSync(logsDir)) {
78
fs.mkdirSync(logsDir, { recursive: true });
89
}
910

10-
const nodeEnv = process.env.NODE_ENV || "development";
11+
const nodeEnv = config.deployment.nodeEnv || "development";
1112

1213
const logger = createLogger({
1314
level: nodeEnv === "development" ? "debug" : "info",

0 commit comments

Comments
 (0)