Skip to content

Commit 4fc0e49

Browse files
committed
feat: #86ew03681 Add request logging middleware to server initialization
- Integrated `requestLogger` middleware into the server's request handling process for improved logging of incoming requests. - Ensured middleware is applied before the health check route for comprehensive request tracking.
1 parent 0d37153 commit 4fc0e49

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

server/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as path from "path";
22
import { createRest } from "@modular-rest/server";
33
import { permissionGroups } from "./permissions";
4+
import { requestLogger } from "./middlewares/request_logger";
45

56
// Load .env file
67
require("dotenv").config({
@@ -35,6 +36,8 @@ const restConfig: any = {
3536
dbPrefix: "goranee_",
3637
},
3738
onBeforeInit: (app: any) => {
39+
app.use(requestLogger);
40+
3841
// Add Health cheker route
3942
let Router = require("koa-router");
4043
let healthCheck = new Router();
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import * as fs from "fs";
2+
import * as path from "path";
3+
4+
const logFilePath = path.join(__dirname, "../..", "request_logs.txt");
5+
6+
export const requestLogger = async (ctx: any, next: any) => {
7+
if (ctx.url.includes("/file")) {
8+
const logEntry = {
9+
type: "REQUEST",
10+
timestamp: new Date().toISOString(),
11+
method: ctx.method,
12+
url: ctx.url,
13+
headers: ctx.headers,
14+
query: ctx.query,
15+
// We check request.body and request.files (populated by koa-body)
16+
body: ctx.request.body,
17+
files: ctx.request.files
18+
? Object.keys(ctx.request.files).map((key) => ({
19+
key,
20+
name:
21+
ctx.request.files[key].name ||
22+
ctx.request.files[key].originalFilename,
23+
size: ctx.request.files[key].size,
24+
type: ctx.request.files[key].type || ctx.request.files[key].mimetype,
25+
}))
26+
: [],
27+
};
28+
29+
fs.appendFileSync(
30+
logFilePath,
31+
JSON.stringify(logEntry, null, 2) + "\n---\n"
32+
);
33+
}
34+
35+
await next();
36+
37+
if (ctx.url.includes("/file")) {
38+
const responseLog = {
39+
type: "RESPONSE",
40+
timestamp: new Date().toISOString(),
41+
url: ctx.url,
42+
status: ctx.status,
43+
body: ctx.body,
44+
};
45+
fs.appendFileSync(
46+
logFilePath,
47+
JSON.stringify(responseLog, null, 2) + "\n====================\n"
48+
);
49+
}
50+
};

0 commit comments

Comments
 (0)