Подтвердить что ты не робот

Захват javascript console.log?

Возможный дубликат:
Перехватить вызовы на console.log в Chrome
Могу ли я расширить объект консоли (для перенаправления ведения журнала) в javascript?

Когда приложение JS записывается в console.log, я хочу записать это сообщение журнала, чтобы я мог AJAX регистрировать вывод на сервер. Как это сделать?

Код, который записывается в журнал, связан с внешними службами, поэтому я не могу просто просто его напрямую связать.

4b9b3361

Ответ 1

Вы можете заблокировать функции JavaScript следующим образом:

(function(){
    var oldLog = console.log;
    console.log = function (message) {
        // DO MESSAGE HERE.
        oldLog.apply(console, arguments);
    };
})();
  • Линия 1 завершает вашу функцию в закрытии, поэтому никакие другие функции не имеют прямого доступа к oldLog (для удобства обслуживания).
  • Строка 2 фиксирует исходный метод.
  • Строка 3 создает новую функцию.
  • Строка 4 - это отправку message на ваш сервер.
  • Строка 5 вызывает оригинальный метод, поскольку он был бы обработан изначально.

apply используется, поэтому мы можем вызвать его на console, используя исходные аргументы. Просто вызов oldLog(message) завершится неудачно, потому что log зависит от его связи с console.


Обновление. В ответе zzzzBov ниже, в IE9 console.log на самом деле не функция, поэтому oldLog.apply завершится с ошибкой. Подробнее см. console.log.apply не работает в IE9.

Ответ 2

Просто:

function yourCustomLog(msg) {
  //send msg via AJAX
}

window.console.log = yourCustomLog;

Вы можете переопределить весь console объект для захвата console.info, console.warn и таких:

window.console = {
  log : function(msg) {...},
  info : function(msg) {...},
  warn : function(msg) {...},
  //...
}