File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77 ObjectAssign,
88 ObjectKeys,
99 ObjectPrototypeToString,
10+ SafeSet,
1011} = primordials ;
1112
1213const {
@@ -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 ;
You can’t perform that action at this time.
0 commit comments