helpyourneighbour/backend/middleware/logger.js

47 lines
1.2 KiB
JavaScript
Raw Normal View History

import { format, createLogger, transports } from 'winston';
const logger = createLogger({
format: format.combine(
format.timestamp(),
format.json()
),
transports: [
new transports.Console()
]
});
// Middleware to generate a unique request ID
const requestId = (req, res, next) => {
req.id = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
next();
};
// Middleware to log requests
const requestLogger = (req, res, next) => {
logger.info({
timestamp: new Date().toISOString(),
method: req.method,
url: req.url,
requestId: req.id
});
next();
};
// Middleware to log errors
const errorLogger = (err, req, res, next) => {
const isSecurityEvent = err.message.includes('Authentication') ||
err.message.includes('Authorization') ||
err.message.includes('Security');
const level = isSecurityEvent ? 'security' : 'error';
logger[level]({
timestamp: new Date().toISOString(),
error: err.message,
stack: err.stack,
requestId: req.id,
route: req.route ? req.route.path : req.path
});
next(err);
};
export { requestId, requestLogger, errorLogger };