From 790b5ffed553addadf897e7b44331c8bd3388ff8 Mon Sep 17 00:00:00 2001 From: Bojan Kucera Date: Sat, 7 Jun 2025 12:02:58 -0400 Subject: [PATCH] improved logger error type handling --- libs/logger/src/logger.ts | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/libs/logger/src/logger.ts b/libs/logger/src/logger.ts index 087fa12..867542d 100644 --- a/libs/logger/src/logger.ts +++ b/libs/logger/src/logger.ts @@ -136,18 +136,34 @@ export class Logger { } error(message: string | object, metadata?: LogMetadata & { error?: any } | unknown): void { - // If metadata is an Error, normalize it - if(metadata instanceof Error){ - metadata = { error: metadata }; + let data: any = {}; + + // Handle metadata parameter normalization + if (metadata instanceof Error) { + // Direct Error object as metadata + data = { error: metadata }; + } else if (metadata !== null && typeof metadata === 'object') { + // Object metadata (including arrays, but not null) + data = { ...metadata }; + } else if (metadata !== undefined) { + // Primitive values (string, number, boolean, etc.) + data = { metadata }; } - const data = typeof metadata === 'object' ? { ...metadata } : { error: message } as any; - - // Handle any type of error automatically - if (data.error) { - data.err = this.normalizeError(data.error); - delete data.error; - } - + + // Handle multiple error properties in metadata + const errorKeys = ['error', 'err', 'primaryError', 'secondaryError']; + errorKeys.forEach(key => { + if (data[key]) { + const normalizedKey = key === 'error' ? 'err' : `${key}_normalized`; + data[normalizedKey] = this.normalizeError(data[key]); + + // Only delete the original 'error' key to maintain other error properties + if (key === 'error') { + delete data.error; + } + } + }); + this.log('error', message, data); }