@@ -9,6 +9,40 @@ type LoggerDelegate = Partial<Record<LogMethod, (...args: any[]) => void>> & {
99} ;
1010
1111const DEFAULT_DELEGATE : LoggerDelegate = console as unknown as LoggerDelegate ;
12+ const LOGGER_STACK_SKIP_TOKENS = [
13+ 'logger.ts' ,
14+ 'logger.js' ,
15+ 'captureStackTrace' ,
16+ 'Logger.emit' ,
17+ 'Logger.log' ,
18+ 'Logger.info' ,
19+ 'Logger.warn' ,
20+ 'Logger.error' ,
21+ 'Logger.debug' ,
22+ ] ;
23+
24+ function captureStackTrace ( ) : string | undefined {
25+ try {
26+ const stack = new Error ( ) . stack ;
27+ if ( ! stack ) {
28+ return undefined ;
29+ }
30+
31+ const [ , ...rawLines ] = stack . split ( '\n' ) ;
32+ const filtered = rawLines . filter (
33+ ( line ) => ! LOGGER_STACK_SKIP_TOKENS . some ( ( token ) => line . includes ( token ) ) ,
34+ ) ;
35+
36+ if ( ! filtered . length ) {
37+ return undefined ;
38+ }
39+
40+ const stackPreview = filtered . slice ( 0 , 5 ) . join ( '\n' ) ;
41+ return `Stack trace:\n${ stackPreview } ` ;
42+ } catch {
43+ return undefined ;
44+ }
45+ }
1246
1347class Logger {
1448 prefix : string ;
@@ -29,6 +63,10 @@ class Logger {
2963
3064 private emit ( method : LogMethod , args : any [ ] ) {
3165 const delegate = this . delegate ;
66+ const debugMode = isDebugMode ( ) ;
67+ const stackTrace = debugMode ? captureStackTrace ( ) : undefined ;
68+ const enrichedArgs = stackTrace ? [ ...args , stackTrace ] : args ;
69+
3270 const order : LogMethod [ ] = ( ( ) => {
3371 switch ( method ) {
3472 case 'log' :
@@ -48,15 +86,15 @@ class Logger {
4886 for ( const candidate of order ) {
4987 const handler = delegate [ candidate ] ;
5088 if ( typeof handler === 'function' ) {
51- handler . call ( delegate , this . prefix , ...args ) ;
89+ handler . call ( delegate , this . prefix , ...enrichedArgs ) ;
5290 return ;
5391 }
5492 }
5593
5694 for ( const candidate of order ) {
5795 const handler = DEFAULT_DELEGATE [ candidate ] ;
5896 if ( typeof handler === 'function' ) {
59- handler . call ( DEFAULT_DELEGATE , this . prefix , ...args ) ;
97+ handler . call ( DEFAULT_DELEGATE , this . prefix , ...enrichedArgs ) ;
6098 return ;
6199 }
62100 }
0 commit comments