improved logger error type handling

This commit is contained in:
Bojan Kucera 2025-06-07 12:02:58 -04:00
parent d0bb4db042
commit 790b5ffed5

View file

@ -136,17 +136,33 @@ export class Logger {
} }
error(message: string | object, metadata?: LogMetadata & { error?: any } | unknown): void { error(message: string | object, metadata?: LogMetadata & { error?: any } | unknown): void {
// If metadata is an Error, normalize it let data: any = {};
if(metadata instanceof Error){
metadata = { error: metadata };
}
const data = typeof metadata === 'object' ? { ...metadata } : { error: message } as any;
// Handle any type of error automatically // Handle metadata parameter normalization
if (data.error) { if (metadata instanceof Error) {
data.err = this.normalizeError(data.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 };
}
// 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; delete data.error;
} }
}
});
this.log('error', message, data); this.log('error', message, data);
} }