Skip to content

Commit b00bf3f

Browse files
committed
Create consoleSandbox util and make logger use it
1 parent c1aa179 commit b00bf3f

File tree

18 files changed

+162
-66
lines changed

18 files changed

+162
-66
lines changed

packages/browser/src/backend.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { BaseBackend, logger, Options, SentryError } from '@sentry/core';
1+
import { BaseBackend, Options, SentryError } from '@sentry/core';
22
import { SentryEvent, SentryEventHint, SentryResponse, Severity, Status } from '@sentry/types';
33
import { isDOMError, isDOMException, isError, isErrorEvent, isPlainObject } from '@sentry/utils/is';
4+
import { logger } from '@sentry/utils/logger';
45
import { supportsBeacon, supportsFetch } from '@sentry/utils/supports';
56
import { eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers';
67
import { computeStackTrace } from './tracekit';

packages/browser/src/integrations/breadcrumbs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { API, getCurrentHub, logger } from '@sentry/core';
1+
import { API, getCurrentHub } from '@sentry/core';
22
import { Breadcrumb, Integration, SentryBreadcrumbHint, Severity } from '@sentry/types';
33
import { isFunction, isString } from '@sentry/utils/is';
4+
import { logger } from '@sentry/utils/logger';
45
import { getEventDescription, getGlobalObject, parseUrl } from '@sentry/utils/misc';
56
import { deserialize, fill } from '@sentry/utils/object';
67
import { includes, safeJoin } from '@sentry/utils/string';

packages/browser/src/integrations/globalhandlers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { getCurrentHub, logger } from '@sentry/core';
1+
import { getCurrentHub } from '@sentry/core';
22
import { Integration, SentryEvent } from '@sentry/types';
3+
import { logger } from '@sentry/utils/logger';
34
import { eventFromStacktrace } from '../parsers';
45
import {
56
installGlobalHandler,

packages/core/src/basebackend.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Scope } from '@sentry/hub';
22
import { Breadcrumb, SentryEvent, SentryEventHint, SentryResponse, Severity, Transport } from '@sentry/types';
3+
import { logger } from '@sentry/utils/logger';
34
import { SentryError } from './error';
45
import { Backend, Options } from './interfaces';
5-
import { logger } from './logger';
66
import { RequestBuffer } from './requestbuffer';
77

88
/** A class object that can instanciate Backend objects. */

packages/core/src/baseclient.ts

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,17 @@ import {
77
SentryEvent,
88
SentryEventHint,
99
SentryResponse,
10-
SentryWrappedFunction,
1110
Severity,
1211
Status,
1312
} from '@sentry/types';
1413
import { forget } from '@sentry/utils/async';
15-
import { getGlobalObject, uuid4 } from '@sentry/utils/misc';
14+
import { logger } from '@sentry/utils/logger';
15+
import { consoleSandbox, uuid4 } from '@sentry/utils/misc';
1616
import { truncate } from '@sentry/utils/string';
1717
import { BackendClass } from './basebackend';
1818
import { Dsn } from './dsn';
1919
import { IntegrationIndex, setupIntegrations } from './integrations';
2020
import { Backend, Client, Options } from './interfaces';
21-
import { logger } from './logger';
2221

2322
/**
2423
* Default maximum number of breadcrumbs added to an event. Can be overwritten
@@ -37,39 +36,6 @@ const MAX_BREADCRUMBS = 100;
3736
*/
3837
const MAX_URL_LENGTH = 250;
3938

40-
/** JSDoc */
41-
interface ExtensibleConsole extends Console {
42-
[key: string]: any;
43-
}
44-
/** JSDoc */
45-
function beforeBreadcrumbConsoleLoopGuard(callback: () => Breadcrumb | null): Breadcrumb | null {
46-
const global = getGlobalObject() as Window;
47-
const levels = ['debug', 'info', 'warn', 'error', 'log'];
48-
if (!('console' in global)) {
49-
return callback();
50-
}
51-
const originalConsole = global.console as ExtensibleConsole;
52-
const wrappedLevels: { [key: string]: any } = {};
53-
54-
// Restore all wrapped console methods
55-
levels.forEach(level => {
56-
if (level in global.console && (originalConsole[level] as SentryWrappedFunction).__sentry__) {
57-
wrappedLevels[level] = (originalConsole[level] as SentryWrappedFunction).__sentry_wrapped__;
58-
originalConsole[level] = (originalConsole[level] as SentryWrappedFunction).__sentry_original__;
59-
}
60-
});
61-
62-
// Perform callback manipulations
63-
const result = callback();
64-
65-
// Revert restoration to wrapped state
66-
Object.keys(wrappedLevels).forEach(level => {
67-
originalConsole[level] = wrappedLevels[level];
68-
});
69-
70-
return result;
71-
}
72-
7339
/**
7440
* Base implementation for all JavaScript SDK clients.
7541
*
@@ -228,7 +194,7 @@ export abstract class BaseClient<B extends Backend, O extends Options> implement
228194
const timestamp = new Date().getTime() / 1000;
229195
const mergedBreadcrumb = { timestamp, ...breadcrumb };
230196
const finalBreadcrumb = beforeBreadcrumb
231-
? beforeBreadcrumbConsoleLoopGuard(() => beforeBreadcrumb(mergedBreadcrumb, hint))
197+
? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)
232198
: mergedBreadcrumb;
233199

234200
if (finalBreadcrumb === null) {
@@ -431,6 +397,11 @@ export abstract class BaseClient<B extends Backend, O extends Options> implement
431397
* @inheritDoc
432398
*/
433399
public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {
434-
return (this.integrations[integration.id] as T) || null;
400+
try {
401+
return (this.integrations[integration.id] as T) || null;
402+
} catch (_oO) {
403+
logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);
404+
return null;
405+
}
435406
}
436407
}

packages/core/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export { logger } from './logger';
21
export {
32
addBreadcrumb,
43
captureException,

packages/core/src/integrations/inboundfilters.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';
22
import { Integration, SentryEvent } from '@sentry/types';
33
import { isRegExp } from '@sentry/utils/is';
4+
import { logger } from '@sentry/utils/logger';
45
import { getEventDescription } from '@sentry/utils/misc';
56
import { includes } from '@sentry/utils/string';
6-
import { logger } from '../logger';
77

88
// "Script error." is hard coded into browsers for errors that it can't read.
99
// this is the result of a script being pulled in from an external domain and CORS.

packages/core/src/integrations/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// tslint:disable:deprecation
22
import { Integration } from '@sentry/types';
3+
import { logger } from '@sentry/utils/logger';
34
import { Options } from '../interfaces';
4-
import { logger } from '../logger';
55

66
export { Dedupe } from './dedupe';
77
export { FunctionToString } from './functiontostring';

packages/core/src/integrations/sdkinformation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Integration } from '@sentry/types';
2-
import { logger } from '../logger';
2+
import { logger } from '@sentry/utils/logger';
33

44
/**
55
* @deprecated

packages/core/src/logger.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getGlobalObject } from '@sentry/utils/misc';
1+
import { consoleSandbox, getGlobalObject } from '@sentry/utils/misc';
22

33
// TODO: Implement different loggers for different environments
44
const global = getGlobalObject() as Window;
@@ -28,21 +28,27 @@ class Logger {
2828
if (this.disabled) {
2929
return;
3030
}
31-
this.console.log(`Sentry Logger [Log]: ${message}`); // tslint:disable-line:no-console
31+
consoleSandbox(() => {
32+
this.console.log(`Sentry Logger [Log]: ${message}`); // tslint:disable-line:no-console
33+
});
3234
}
3335
/** JSDoc */
3436
public warn(message: any): void {
3537
if (this.disabled) {
3638
return;
3739
}
38-
this.console.warn(`Sentry Logger [Warn]: ${message}`); // tslint:disable-line:no-console
40+
consoleSandbox(() => {
41+
this.console.warn(`Sentry Logger [Warn]: ${message}`); // tslint:disable-line:no-console
42+
});
3943
}
4044
/** JSDoc */
4145
public error(message: any): void {
4246
if (this.disabled) {
4347
return;
4448
}
45-
this.console.error(`Sentry Logger [Error]: ${message}`); // tslint:disable-line:no-console
49+
consoleSandbox(() => {
50+
this.console.error(`Sentry Logger [Error]: ${message}`); // tslint:disable-line:no-console
51+
});
4652
}
4753
}
4854

0 commit comments

Comments
 (0)