Skip to content

Commit f2b966f

Browse files
committed
Avoid recursion when using the console plugin
Fixes #320 #364 #369
1 parent 5cececa commit f2b966f

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

plugins/console.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ var logForGivenLevel = function(level) {
2525
if (originalConsoleLevel) {
2626
// IE9 doesn't allow calling apply on console functions directly
2727
// See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
28-
Function.prototype.bind
29-
.call(originalConsoleLevel, originalConsole)
30-
.apply(originalConsole, args);
28+
Function.prototype.bind
29+
.call(originalConsoleLevel, originalConsole)
30+
.apply(originalConsole, args);
3131
}
3232
};
3333
};
@@ -39,5 +39,7 @@ while(level) {
3939
}
4040
// export
4141
window.console = console;
42+
// keep a reference to the original console so we don't recurse on ourselves
43+
window._Raven_original_console = originalConsole;
4244

4345
}(window, window.Raven, window.console || {}));

src/raven.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,9 +851,13 @@ function uuid4() {
851851

852852
function logDebug(level) {
853853
if (window.console && console[level] && Raven.debug) {
854+
// If `window._Raven_original_console exists, that means
855+
// we've already patched `console`. So we want to avoid recursion
856+
// and utilize the real, original one.
857+
var originalConsole = window._Raven_original_console || console;
854858
// _slice is coming from vendor/TraceKit/tracekit.js
855859
// so it's accessible globally
856-
console[level].apply(console, _slice.call(arguments, 1));
860+
originalConsole[level].apply(originalConsole, _slice.call(arguments, 1));
857861
}
858862
}
859863

test/raven.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,17 @@ describe('globals', function() {
342342
this.sinon.stub(console, level);
343343
logDebug(level, message, {}, 'foo');
344344
});
345+
346+
it('should write to window._Raven_original_console when patched', function() {
347+
Raven.debug = true;
348+
this.sinon.stub(console);
349+
window._Raven_original_console = {'error': function(){}};
350+
this.sinon.stub(window._Raven_original_console, level);
351+
logDebug(level, message);
352+
assert.isTrue(window._Raven_original_console[level].called);
353+
assert.isFalse(console[level].called);
354+
delete window._Raven_original_console;
355+
});
345356
});
346357

347358
describe('setAuthQueryString', function() {

0 commit comments

Comments
 (0)