@@ -6,9 +6,15 @@ import { DEBUG_BUILD } from '../debug-build';
6
6
7
7
type ReplayConsoleLevels = Extract < ConsoleLevel , 'info' | 'warn' | 'error' | 'log' > ;
8
8
const CONSOLE_LEVELS : readonly ReplayConsoleLevels [ ] = [ 'info' , 'warn' , 'error' , 'log' ] as const ;
9
+ const PREFIX = '[Replay] ' ;
9
10
10
11
type LoggerMethod = ( ...args : unknown [ ] ) => void ;
11
- type LoggerConsoleMethods = Record < 'info' | 'warn' | 'error' | 'log' , LoggerMethod > ;
12
+ type LoggerConsoleMethods = Record < ReplayConsoleLevels , LoggerMethod > ;
13
+
14
+ interface LoggerConfig {
15
+ captureExceptions : boolean ;
16
+ traceInternals : boolean ;
17
+ }
12
18
13
19
/** JSDoc */
14
20
interface ReplayLogger extends LoggerConsoleMethods {
@@ -21,13 +27,18 @@ interface ReplayLogger extends LoggerConsoleMethods {
21
27
* Captures exceptions (`Error`) if "capture internal exceptions" is enabled
22
28
*/
23
29
exception : LoggerMethod ;
24
- enableCaptureInternalExceptions ( ) : void ;
25
- disableCaptureInternalExceptions ( ) : void ;
26
- enableTraceInternals ( ) : void ;
27
- disableTraceInternals ( ) : void ;
30
+ /**
31
+ * Configures the logger with additional debugging behavior
32
+ */
33
+ setConfig ( config : LoggerConfig ) : void ;
28
34
}
29
35
30
- function _addBreadcrumb ( message : string , level : SeverityLevel = 'info' ) : void {
36
+ function _addBreadcrumb ( message : unknown , level : SeverityLevel = 'info' ) : void {
37
+ // Only support strings for breadcrumbs
38
+ if ( typeof message !== 'string' ) {
39
+ return ;
40
+ }
41
+
31
42
// Wait a tick here to avoid race conditions for some initial logs
32
43
// which may be added before replay is initialized
33
44
addBreadcrumb (
@@ -37,7 +48,7 @@ function _addBreadcrumb(message: string, level: SeverityLevel = 'info'): void {
37
48
logger : 'replay' ,
38
49
} ,
39
50
level,
40
- message : `[Replay] ${ message } ` ,
51
+ message : `${ PREFIX } ${ message } ` ,
41
52
} ,
42
53
{ level } ,
43
54
) ;
@@ -50,46 +61,36 @@ function makeReplayLogger(): ReplayLogger {
50
61
const _logger : Partial < ReplayLogger > = {
51
62
exception : ( ) => undefined ,
52
63
infoTick : ( ) => undefined ,
53
- enableCaptureInternalExceptions : ( ) => {
54
- _capture = true ;
55
- } ,
56
- disableCaptureInternalExceptions : ( ) => {
57
- _capture = false ;
58
- } ,
59
- enableTraceInternals : ( ) => {
60
- _trace = true ;
61
- } ,
62
- disableTraceInternals : ( ) => {
63
- _trace = false ;
64
+ setConfig : ( opts : LoggerConfig ) => {
65
+ _capture = opts . captureExceptions ;
66
+ _trace = opts . traceInternals ;
64
67
} ,
65
68
} ;
66
69
67
70
if ( DEBUG_BUILD ) {
68
71
_logger . exception = ( error : unknown ) => {
69
- coreLogger . error ( '[Replay] ' , error ) ;
72
+ coreLogger . error ( PREFIX , error ) ;
70
73
71
74
if ( _capture ) {
72
75
captureException ( error ) ;
73
- }
74
-
75
- // No need for a breadcrumb is `_capture` is enabled since it should be
76
- // captured as an exception
77
- if ( _trace && ! _capture ) {
76
+ } else if ( _trace ) {
77
+ // No need for a breadcrumb is `_capture` is enabled since it should be
78
+ // captured as an exception
78
79
_addBreadcrumb ( error instanceof Error ? error . message : 'Unknown error' ) ;
79
80
}
80
81
} ;
81
82
82
83
_logger . infoTick = ( ...args : unknown [ ] ) => {
83
- coreLogger . info ( '[Replay] ' , ...args ) ;
84
+ coreLogger . info ( PREFIX , ...args ) ;
84
85
if ( _trace ) {
85
- setTimeout ( ( ) => typeof args [ 0 ] === 'string' && _addBreadcrumb ( args [ 0 ] ) , 0 ) ;
86
+ setTimeout ( ( ) => _addBreadcrumb ( args [ 0 ] ) , 0 ) ;
86
87
}
87
88
} ;
88
89
89
90
CONSOLE_LEVELS . forEach ( name => {
90
91
_logger [ name ] = ( ...args : unknown [ ] ) => {
91
- coreLogger [ name ] ( '[Replay] ' , ...args ) ;
92
- if ( _trace && typeof args [ 0 ] === 'string' ) {
92
+ coreLogger [ name ] ( PREFIX , ...args ) ;
93
+ if ( _trace ) {
93
94
_addBreadcrumb ( args [ 0 ] ) ;
94
95
}
95
96
} ;
0 commit comments