Skip to content

Commit 11a9b97

Browse files
committed
lib: handle cause case
1 parent 9c2e2a9 commit 11a9b97

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

lib/logger.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const {
77
ObjectAssign,
88
ObjectKeys,
99
ObjectPrototypeToString,
10+
SafeSet,
1011
} = primordials;
1112

1213
const {
@@ -331,22 +332,38 @@ class Logger {
331332
}
332333

333334
/**
334-
* Serialize Error object for logging
335+
* Serialize Error object for logging (with recursive cause handling)
335336
* @param {object} err - Error object to serialize
337+
* @param {Set} [seen] - Set to track circular references
336338
* @returns {object} Serialized error object
337339
* @private
338340
*/
339-
_serializeError(err) {
341+
_serializeError(err, seen = new SafeSet()) {
342+
if (seen.has(err)) {
343+
return '[Circular]';
344+
}
345+
seen.add(err);
346+
340347
const serialized = {
341348
message: err.message,
342349
name: err.name,
343350
stack: err.stack,
344351
};
345352

346-
serialized.code ||= err.code;
353+
if (err.code !== undefined) {
354+
serialized.code = err.code;
355+
}
356+
357+
if (err.cause !== undefined) {
358+
serialized.cause = this._isError(err.cause) ?
359+
this._serializeError(err.cause, seen) :
360+
err.cause;
361+
}
347362

348363
for (const key in err) {
349-
serialized[key] ||= err[key];
364+
if (serialized[key] === undefined) {
365+
serialized[key] = err[key];
366+
}
350367
}
351368

352369
return serialized;

0 commit comments

Comments
 (0)