Javascript-переопределение консоли.войти и сохранить старую функцию

Я хотел бы переопределить консоль.войдите и вызовите его на моей новой функции.

Я пробую что-то вроде этого, но я получаю Uncaught TypeError: Illegal invocation:

console.log = function() {
  this.apply(window, arguments);
}.bind(console.log);

console.log('as');

Это моя цель:

console.error(exception); надо сделать:

console.error = function() {
  if (typeof exception.stack !== 'undefined') {
    console.error(exception.stack);
  } else {
    console.error.apply(windows, arguments);
  }
}.bind(console.error);

console.error('as');
console.error({stack: 'my stack....'});

изменить: На самом деле, он работает в firefox, а не в Chrome... Это ошибка в Chrome:https://code.google.com/p/chromium/issues/detail?id=167911

5 ответов


У вас может быть что-то вроде этого:

console.error = (function() {
    var error = console.error;

    return function(exception) {
        if (typeof exception.stack !== 'undefined') {
            error.call(console, exception.stack);
        } else {
            error.apply(console, arguments);
        }
    }
})();

лучший способ достичь того, чего вы хотите :

// define a new console
var console=(function(oldCons){
    return {
        log: function(text){
            oldCons.log(text);
            // Your code
        },
        info: function (text) {
            oldCons.info(text);
            // Your code
        },
        warn: function (text) {
            oldCons.warn(text);
            // Your code
        },
        error: function (text) {
            oldCons.error(text);
            // Your code
        }
    };
}(window.console));

//Then redefine the old console
window.console = console;

попробуйте это:

var console={
    log: function(v){
        alert(v);
    }
};
console.log('hello world');

UPD:

проверить это:

var originalConsole={
    log: (function(c){
        return function(v){
            c.log(v);
        };
    }(window.console))
};
var console={
    log: function(v){
        originalConsole.log('_original_');
        originalConsole.log(v);
    }
};
console.log('hello world');

originalConsole хранит необходимые методы оригинала


вы призываете


Я бы рекомендовал использовать: https://github.com/sunnykgupta/jsLogger

характеристики:

  1. он спокойно отменяет консоль.бревно.
  2. заботится, если консоль недоступна (О да, вам нужно учитывать это тоже.)
  3. хранит все журналы (даже если они погашены) для последующего извлечения.
  4. обрабатывает основные функции консоли, такие как log, warn, error, info.

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

отказ от ответственности: Я являюсь автором плагина.