logger.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { DEBUG_BUILD } from './debug-build.js';
  2. import { GLOBAL_OBJ } from './worldwide.js';
  3. /** Prefix for logging strings */
  4. const PREFIX = 'Sentry Logger ';
  5. const CONSOLE_LEVELS = [
  6. 'debug',
  7. 'info',
  8. 'warn',
  9. 'error',
  10. 'log',
  11. 'assert',
  12. 'trace',
  13. ] ;
  14. /** This may be mutated by the console instrumentation. */
  15. const originalConsoleMethods
  16. = {};
  17. /** JSDoc */
  18. /**
  19. * Temporarily disable sentry console instrumentations.
  20. *
  21. * @param callback The function to run against the original `console` messages
  22. * @returns The results of the callback
  23. */
  24. function consoleSandbox(callback) {
  25. if (!('console' in GLOBAL_OBJ)) {
  26. return callback();
  27. }
  28. const console = GLOBAL_OBJ.console ;
  29. const wrappedFuncs = {};
  30. const wrappedLevels = Object.keys(originalConsoleMethods) ;
  31. // Restore all wrapped console methods
  32. wrappedLevels.forEach(level => {
  33. const originalConsoleMethod = originalConsoleMethods[level] ;
  34. wrappedFuncs[level] = console[level] ;
  35. console[level] = originalConsoleMethod;
  36. });
  37. try {
  38. return callback();
  39. } finally {
  40. // Revert restoration to wrapped state
  41. wrappedLevels.forEach(level => {
  42. console[level] = wrappedFuncs[level] ;
  43. });
  44. }
  45. }
  46. function makeLogger() {
  47. let enabled = false;
  48. const logger = {
  49. enable: () => {
  50. enabled = true;
  51. },
  52. disable: () => {
  53. enabled = false;
  54. },
  55. isEnabled: () => enabled,
  56. };
  57. if (DEBUG_BUILD) {
  58. CONSOLE_LEVELS.forEach(name => {
  59. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  60. logger[name] = (...args) => {
  61. if (enabled) {
  62. consoleSandbox(() => {
  63. GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);
  64. });
  65. }
  66. };
  67. });
  68. } else {
  69. CONSOLE_LEVELS.forEach(name => {
  70. logger[name] = () => undefined;
  71. });
  72. }
  73. return logger ;
  74. }
  75. const logger = makeLogger();
  76. export { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };
  77. //# sourceMappingURL=logger.js.map