Keep the original console as `global.originalConsole`
Summary: If a console exists, keep the original as `global.originalConsole` before overwriting `global.console` with a polyfill. This matches what we do for XHR, fetch, and some other libraries. Closes https://github.com/facebook/react-native/pull/3322 Reviewed By: svcscm Differential Revision: D2755873 Pulled By: androidtrunkagent fb-gh-sync-id: 4c23f807b73b79cfa9fbbd4e2814d76eecabd596
This commit is contained in:
parent
dbc35b69fa
commit
7028206b97
|
@ -366,8 +366,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
function setupConsole(global) {
|
function setupConsole(global) {
|
||||||
var originalConsole = global.console;
|
|
||||||
|
|
||||||
if (!global.nativeLoggingHook) {
|
if (!global.nativeLoggingHook) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -461,7 +459,14 @@
|
||||||
global.nativeLoggingHook('\n' + table.join('\n'), LOG_LEVELS.info);
|
global.nativeLoggingHook('\n' + table.join('\n'), LOG_LEVELS.info);
|
||||||
}
|
}
|
||||||
|
|
||||||
global.console = {
|
// Preserve the original `console` as `originalConsole`
|
||||||
|
var originalConsole = global.console;
|
||||||
|
var descriptor = Object.getOwnPropertyDescriptor(global, 'console');
|
||||||
|
if (descriptor) {
|
||||||
|
Object.defineProperty(global, 'originalConsole', descriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
var console = {
|
||||||
error: getNativeLogFunction(LOG_LEVELS.error),
|
error: getNativeLogFunction(LOG_LEVELS.error),
|
||||||
info: getNativeLogFunction(LOG_LEVELS.info),
|
info: getNativeLogFunction(LOG_LEVELS.info),
|
||||||
log: getNativeLogFunction(LOG_LEVELS.info),
|
log: getNativeLogFunction(LOG_LEVELS.info),
|
||||||
|
@ -469,17 +474,19 @@
|
||||||
trace: getNativeLogFunction(LOG_LEVELS.trace),
|
trace: getNativeLogFunction(LOG_LEVELS.trace),
|
||||||
table: consoleTablePolyfill
|
table: consoleTablePolyfill
|
||||||
};
|
};
|
||||||
|
descriptor.value = console;
|
||||||
|
Object.defineProperty(global, 'console', descriptor);
|
||||||
|
|
||||||
// If available, also call the original `console` method since that is
|
// If available, also call the original `console` method since that is
|
||||||
// sometimes useful. Ex: on OS X, this will let you see rich output in
|
// sometimes useful. Ex: on OS X, this will let you see rich output in
|
||||||
// the Safari Web Inspector console.
|
// the Safari Web Inspector console.
|
||||||
if (__DEV__ && originalConsole) {
|
if (__DEV__ && originalConsole) {
|
||||||
Object.keys(global.console).forEach(methodName => {
|
Object.keys(console).forEach(methodName => {
|
||||||
var reactNativeMethod = global.console[methodName];
|
var reactNativeMethod = console[methodName];
|
||||||
if (originalConsole[methodName]) {
|
if (originalConsole[methodName]) {
|
||||||
global.console[methodName] = function() {
|
console[methodName] = function() {
|
||||||
originalConsole[methodName](...arguments);
|
originalConsole[methodName](...arguments);
|
||||||
reactNativeMethod.apply(global.console, arguments);
|
reactNativeMethod.apply(console, arguments);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue