34 lines
966 B
TypeScript
Executable File
34 lines
966 B
TypeScript
Executable File
import { Request, Response, NextFunction } from "express";
|
|
|
|
function log(message: string) {
|
|
console.log(`[${new Date().toISOString()}] ${message}`);
|
|
}
|
|
|
|
export function apiLogger(req: Request, res: Response, next: NextFunction) {
|
|
const start = Date.now();
|
|
const path = req.path;
|
|
let capturedJsonResponse: Record<string, any> | undefined = undefined;
|
|
|
|
const originalResJson = res.json;
|
|
res.json = function (bodyJson, ...args) {
|
|
capturedJsonResponse = bodyJson;
|
|
return originalResJson.apply(res, [bodyJson, ...args]);
|
|
};
|
|
|
|
res.on("finish", () => {
|
|
const duration = Date.now() - start;
|
|
if (path.startsWith("/api")) {
|
|
let logLine = `${req.method} ${path} ${res.statusCode} in ${duration}ms`;
|
|
if (capturedJsonResponse) {
|
|
logLine += ` :: ${JSON.stringify(capturedJsonResponse)}`;
|
|
}
|
|
if (logLine.length > 80) {
|
|
logLine = logLine.slice(0, 79) + "…";
|
|
}
|
|
log(logLine);
|
|
}
|
|
});
|
|
|
|
next();
|
|
}
|