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,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);
}