1- import type { WrappedFunction } from '@sentry/types' ;
2-
3- import { getGlobalSingleton , GLOBAL_OBJ } from './worldwide' ;
1+ import { GLOBAL_OBJ } from './worldwide' ;
42
53/** Prefix for logging strings */
64const PREFIX = 'Sentry Logger ' ;
@@ -9,7 +7,13 @@ export const CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert'
97export type ConsoleLevel = ( typeof CONSOLE_LEVELS ) [ number ] ;
108
119type LoggerMethod = ( ...args : unknown [ ] ) => void ;
12- type LoggerConsoleMethods = Record < ( typeof CONSOLE_LEVELS ) [ number ] , LoggerMethod > ;
10+ type LoggerConsoleMethods = Record < ConsoleLevel , LoggerMethod > ;
11+
12+ /** This may be mutated by the console instrumentation. */
13+ export const originalConsoleMethods : {
14+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15+ [ key in ConsoleLevel ] ?: ( ...args : any [ ] ) => void ;
16+ } = { } ;
1317
1418/** JSDoc */
1519interface Logger extends LoggerConsoleMethods {
@@ -28,26 +32,24 @@ export function consoleSandbox<T>(callback: () => T): T {
2832 return callback ( ) ;
2933 }
3034
31- const originalConsole = GLOBAL_OBJ . console as Console & Record < string , unknown > ;
32- const wrappedLevels : Partial < LoggerConsoleMethods > = { } ;
35+ const console = GLOBAL_OBJ . console as Console ;
36+ const wrappedFuncs : Partial < LoggerConsoleMethods > = { } ;
37+
38+ const wrappedLevels = Object . keys ( originalConsoleMethods ) as ConsoleLevel [ ] ;
3339
3440 // Restore all wrapped console methods
35- CONSOLE_LEVELS . forEach ( level => {
36- // TODO(v7): Remove this check as it's only needed for Node 6
37- const originalWrappedFunc =
38- originalConsole [ level ] && ( originalConsole [ level ] as WrappedFunction ) . __sentry_original__ ;
39- if ( level in originalConsole && originalWrappedFunc ) {
40- wrappedLevels [ level ] = originalConsole [ level ] as LoggerConsoleMethods [ typeof level ] ;
41- originalConsole [ level ] = originalWrappedFunc as Console [ typeof level ] ;
42- }
41+ wrappedLevels . forEach ( level => {
42+ const originalConsoleMethod = originalConsoleMethods [ level ] as LoggerMethod ;
43+ wrappedFuncs [ level ] = console [ level ] as LoggerMethod | undefined ;
44+ console [ level ] = originalConsoleMethod ;
4345 } ) ;
4446
4547 try {
4648 return callback ( ) ;
4749 } finally {
4850 // Revert restoration to wrapped state
49- Object . keys ( wrappedLevels ) . forEach ( level => {
50- originalConsole [ level ] = wrappedLevels [ level as ( typeof CONSOLE_LEVELS ) [ number ] ] ;
51+ wrappedLevels . forEach ( level => {
52+ console [ level ] = wrappedFuncs [ level ] as LoggerMethod ;
5153 } ) ;
5254 }
5355}
@@ -83,12 +85,4 @@ function makeLogger(): Logger {
8385 return logger as Logger ;
8486}
8587
86- // Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used
87- let logger : Logger ;
88- if ( __DEBUG_BUILD__ ) {
89- logger = getGlobalSingleton ( 'logger' , makeLogger ) ;
90- } else {
91- logger = makeLogger ( ) ;
92- }
93-
94- export { logger } ;
88+ export const logger = makeLogger ( ) ;
0 commit comments