Error logging — centralized error tracking and alerting.
1class ErrorLogger {2 constructor(config) {3 this.config = config;4 this.logger = pino({ level: "error" });5 }67 async log(error, context = {}) {8 const entry = {9 timestamp: new Date().toISOString(),10 level: "error",11 message: error.message,12 stack: error.stack,13 code: error.code,14 ...context,15 };1617 // Log locally18 this.logger.error(entry);1920 // Send to external service21 if (this.config.sentryDsn) {22 Sentry.captureException(error, {23 extra: context,24 });25 }2627 // Alert on critical errors28 if (error.severity === "critical") {29 await this.alert(error, context);30 }31 }3233 async alert(error, context) {34 await fetch(this.config.alertWebhook, {35 method: "POST",36 headers: { "Content-Type": "application/json" },37 body: JSON.stringify({38 text: `Critical error: ${error.message}`,39 context,40 }),41 });42 }43}4445// Express error handler46app.use((err, req, res, next) => {47 errorLogger.log(err, {48 url: req.url,49 method: req.method,50 userId: req.user?.id,51 requestId: req.id,52 });53 res.status(err.status || 500).json({ error: "Internal error" });54});