Skip to main content
Glama
logging.tsβ€’1.97 kB
import { Request, Response, NextFunction } from 'express'; import { v4 as uuidv4 } from 'uuid'; import { logger } from '@core/logger/index.js'; // Extend Express Request interface to include requestId declare global { namespace Express { interface Request { requestId: string; startTime: number; } } } /** * Request ID middleware - adds unique request ID to each request */ export function requestIdMiddleware(req: Request, res: Response, next: NextFunction): void { req.requestId = uuidv4(); req.startTime = Date.now(); // Add request ID to response headers res.setHeader('X-Request-ID', req.requestId); next(); } /** * Request logging middleware - logs incoming requests and responses */ export function requestLoggingMiddleware(req: Request, res: Response, next: NextFunction): void { const { method, url, ip, headers } = req; const userAgent = headers['user-agent'] || 'unknown'; // Log incoming request logger.info('API Request', { requestId: req.requestId, method, url, ip, userAgent, contentType: headers['content-type'], }); // Override res.end to log response const originalEnd = res.end; res.end = function (chunk?: any, encoding?: any): any { const duration = Date.now() - req.startTime; const { statusCode } = res; // Log response logger.info('API Response', { requestId: req.requestId, method, url, statusCode, duration: `${duration}ms`, responseSize: res.get('content-length') || 'unknown', }); // Call original end method return originalEnd.call(this, chunk, encoding); }; next(); } /** * Error logging middleware - logs errors with request context */ export function errorLoggingMiddleware( err: Error, req: Request, res: Response, next: NextFunction ): void { logger.error('API Error', { requestId: req.requestId, method: req.method, url: req.url, error: err.message, stack: err.stack, userAgent: req.headers['user-agent'], }); next(err); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/campfirein/cipher'

If you have feedback or need assistance with the MCP directory API, please join our Discord server