fix: use pino err key for proper Error serialization in controllers

Error objects logged as { error } were serialized as {} because pino
only applies its error serializer to the err key.
This commit is contained in:
2026-02-09 22:41:46 +01:00
parent 189c38dc2b
commit 5a9485acfc
3 changed files with 21 additions and 21 deletions

View File

@@ -15,7 +15,7 @@ export class CaldavController {
const response = await this.caldavService.saveConfig(config); const response = await this.caldavService.saveConfig(config);
res.json(response); res.json(response);
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error saving config"); log.error({ err: error, userId: req.user?.userId }, "Error saving config");
res.status(500).json({ error: "Failed to save config" }); res.status(500).json({ error: "Failed to save config" });
} }
} }
@@ -30,7 +30,7 @@ export class CaldavController {
// Don't expose the password to the client // Don't expose the password to the client
res.json(config); res.json(config);
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error loading config"); log.error({ err: error, userId: req.user?.userId }, "Error loading config");
res.status(500).json({ error: "Failed to load config" }); res.status(500).json({ error: "Failed to load config" });
} }
} }
@@ -40,7 +40,7 @@ export class CaldavController {
await this.caldavService.deleteConfig(req.user!.userId); await this.caldavService.deleteConfig(req.user!.userId);
res.status(204).send(); res.status(204).send();
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error deleting config"); log.error({ err: error, userId: req.user?.userId }, "Error deleting config");
res.status(500).json({ error: "Failed to delete config" }); res.status(500).json({ error: "Failed to delete config" });
} }
} }
@@ -50,7 +50,7 @@ export class CaldavController {
const events = await this.caldavService.pullEvents(req.user!.userId); const events = await this.caldavService.pullEvents(req.user!.userId);
res.json(events); res.json(events);
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error pulling events"); log.error({ err: error, userId: req.user?.userId }, "Error pulling events");
res.status(500).json({ error: "Failed to pull events" }); res.status(500).json({ error: "Failed to pull events" });
} }
} }
@@ -60,7 +60,7 @@ export class CaldavController {
await this.caldavService.pushAll(req.user!.userId); await this.caldavService.pushAll(req.user!.userId);
res.status(204).send(); res.status(204).send();
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error pushing events"); log.error({ err: error, userId: req.user?.userId }, "Error pushing events");
res.status(500).json({ error: "Failed to push events" }); res.status(500).json({ error: "Failed to push events" });
} }
} }
@@ -78,7 +78,7 @@ export class CaldavController {
await this.caldavService.pushEvent(req.user!.userId, event); await this.caldavService.pushEvent(req.user!.userId, event);
res.status(204).send(); res.status(204).send();
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error pushing event"); log.error({ err: error, userId: req.user?.userId }, "Error pushing event");
res.status(500).json({ error: "Failed to push event" }); res.status(500).json({ error: "Failed to push event" });
} }
} }

View File

@@ -28,7 +28,7 @@ export class ChatController {
res.json(response); res.json(response);
} catch (error) { } catch (error) {
log.error( log.error(
{ error, userId: req.user?.userId }, { err: error, userId: req.user?.userId },
"Error processing message", "Error processing message",
); );
res.status(500).json({ error: "Failed to process message" }); res.status(500).json({ error: "Failed to process message" });
@@ -79,13 +79,13 @@ export class ChatController {
await this.caldavService.pushAll(userId); await this.caldavService.pushAll(userId);
} }
} catch (error) { } catch (error) {
log.error({ error, userId }, "CalDAV push after confirm failed"); log.error({ err: error, userId }, "CalDAV push after confirm failed");
} }
res.json(response); res.json(response);
} catch (error) { } catch (error) {
log.error( log.error(
{ error, conversationId: req.params.conversationId }, { err: error, conversationId: req.params.conversationId },
"Error confirming event", "Error confirming event",
); );
res.status(500).json({ error: "Failed to confirm event" }); res.status(500).json({ error: "Failed to confirm event" });
@@ -106,7 +106,7 @@ export class ChatController {
res.json(response); res.json(response);
} catch (error) { } catch (error) {
log.error( log.error(
{ error, conversationId: req.params.conversationId }, { err: error, conversationId: req.params.conversationId },
"Error rejecting event", "Error rejecting event",
); );
res.status(500).json({ error: "Failed to reject event" }); res.status(500).json({ error: "Failed to reject event" });
@@ -123,7 +123,7 @@ export class ChatController {
res.json(conversations); res.json(conversations);
} catch (error) { } catch (error) {
log.error( log.error(
{ error, userId: req.user?.userId }, { err: error, userId: req.user?.userId },
"Error getting conversations", "Error getting conversations",
); );
res.status(500).json({ error: "Failed to get conversations" }); res.status(500).json({ error: "Failed to get conversations" });
@@ -157,7 +157,7 @@ export class ChatController {
res.status(404).json({ error: "Conversation not found" }); res.status(404).json({ error: "Conversation not found" });
} else { } else {
log.error( log.error(
{ error, conversationId: req.params.id }, { err: error, conversationId: req.params.id },
"Error getting conversation", "Error getting conversation",
); );
res.status(500).json({ error: "Failed to get conversation" }); res.status(500).json({ error: "Failed to get conversation" });
@@ -187,7 +187,7 @@ export class ChatController {
} }
} catch (error) { } catch (error) {
log.error( log.error(
{ error, messageId: req.params.messageId }, { err: error, messageId: req.params.messageId },
"Error updating proposal event", "Error updating proposal event",
); );
res.status(500).json({ error: "Failed to update proposal event" }); res.status(500).json({ error: "Failed to update proposal event" });

View File

@@ -18,7 +18,7 @@ export class EventController {
try { try {
await this.caldavService.pushEvent(userId, event); await this.caldavService.pushEvent(userId, event);
} catch (error) { } catch (error) {
log.error({ error, userId }, "Error pushing event to CalDAV"); log.error({ err: error, userId }, "Error pushing event to CalDAV");
} }
} }
} }
@@ -28,7 +28,7 @@ export class EventController {
try { try {
await this.caldavService.deleteEvent(userId, event.caldavUUID); await this.caldavService.deleteEvent(userId, event.caldavUUID);
} catch (error) { } catch (error) {
log.error({ error, userId }, "Error deleting event from CalDAV"); log.error({ err: error, userId }, "Error deleting event from CalDAV");
} }
} }
} }
@@ -40,7 +40,7 @@ export class EventController {
await this.pushToCaldav(userId, event); await this.pushToCaldav(userId, event);
res.status(201).json(event); res.status(201).json(event);
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error creating event"); log.error({ err: error, userId: req.user?.userId }, "Error creating event");
res.status(500).json({ error: "Failed to create event" }); res.status(500).json({ error: "Failed to create event" });
} }
} }
@@ -57,7 +57,7 @@ export class EventController {
} }
res.json(event); res.json(event);
} catch (error) { } catch (error) {
log.error({ error, eventId: req.params.id }, "Error getting event"); log.error({ err: error, eventId: req.params.id }, "Error getting event");
res.status(500).json({ error: "Failed to get event" }); res.status(500).json({ error: "Failed to get event" });
} }
} }
@@ -67,7 +67,7 @@ export class EventController {
const events = await this.eventService.getAll(req.user!.userId); const events = await this.eventService.getAll(req.user!.userId);
res.json(events); res.json(events);
} catch (error) { } catch (error) {
log.error({ error, userId: req.user?.userId }, "Error getting events"); log.error({ err: error, userId: req.user?.userId }, "Error getting events");
res.status(500).json({ error: "Failed to get events" }); res.status(500).json({ error: "Failed to get events" });
} }
} }
@@ -100,7 +100,7 @@ export class EventController {
res.json(events); res.json(events);
} catch (error) { } catch (error) {
log.error( log.error(
{ error, start: req.query.start, end: req.query.end }, { err: error, start: req.query.start, end: req.query.end },
"Error getting events by range", "Error getting events by range",
); );
res.status(500).json({ error: "Failed to get events" }); res.status(500).json({ error: "Failed to get events" });
@@ -124,7 +124,7 @@ export class EventController {
res.json(event); res.json(event);
} catch (error) { } catch (error) {
log.error({ error, eventId: req.params.id }, "Error updating event"); log.error({ err: error, eventId: req.params.id }, "Error updating event");
res.status(500).json({ error: "Failed to update event" }); res.status(500).json({ error: "Failed to update event" });
} }
} }
@@ -171,7 +171,7 @@ export class EventController {
await this.deleteFromCaldav(userId, event); await this.deleteFromCaldav(userId, event);
res.status(204).send(); res.status(204).send();
} catch (error) { } catch (error) {
log.error({ error, eventId: req.params.id }, "Error deleting event"); log.error({ err: error, eventId: req.params.id }, "Error deleting event");
res.status(500).json({ error: "Failed to delete event" }); res.status(500).json({ error: "Failed to delete event" });
} }
} }