Capturing javascript console.log?

javascript

Solution

You can hijack JavaScript functions in the following manner:

(function(){
    var oldLog = console.log;
    console.log = function (message) {
        // DO MESSAGE HERE.
        oldLog.apply(console, arguments);
    };
})();

- Line 1 wraps your function in a closure so no other functions have direct access to `oldLog` (for maintainability reasons).

- Line 2 captures the original method.

- Line 3 creates a new function.

- Line 4 is where you send `message` to your server.

- Line 5 is invokes the original method as it would have been handled originally.

`apply` is used so we can invoke it on `console` using the original arguments. Simply calling `oldLog(message)` would fail because `log` depends on its association with `console`.

Update Per zzzzBov's comment below, in IE9 `console.log` isn't actually a function so `oldLog.apply` would fail. See console.log.apply not working in IE9 for more details.

Problem

Possible Duplicate: Intercept calls to console.log in Chrome Can I extend the console object (for rerouting the logging) in javascript? When my JS app writes to the `console.log`, I want to capture that log message so that I can AJAX that log output to the server. How do I do that? The code that writes to the log is from external services, which is why I can't just ajax it directly.

Original source

Related problems