вторник, 28 января 2014 г.

JavaScript проверка наличия Console.log и простейший Дебагер

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

console && console.log && console.log("whatever");

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

;(function () {

    window.console = window.console || {};

    var methods = [
        'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
        'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
        'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
        'timeStamp', 'trace', 'warn'
      ]
    , length = methods.length
    , currentMethod;

    while (length--) {
        currentMethod = methods[length];
        if ( ! window.console[currentMethod] ) {
            window.console[currentMethod] = function () {};
        }
    }

})();

Пример дебагера с использованием консоли.

var debug = {
      enable: true
    , log: function (message) {
        if (this.enable && console && console.log) {
            console.log(message);
        }
    }
};

debug.log('Все работает!');

Пример отсылки логов на сервер для записи их в лог-файл.

var Logger = {

      url: null

    , number: 0

    , log: function (message, url, line) {
        this._sendLog(message, url, line, 'log');
    }

    , debug: function (message, url, line) {
        this._sendLog(message, url, line, 'debug');
    }

    , info: function (message, url, line) {
        this._sendLog(message, url, line, 'info');
    }

    , warn: function (message, url, line) {
        this._sendLog(message, url, line, 'warn');
    }

    , error: function (message, url, line) {
        this._sendLog(message, url, line, 'error');
    }

    , _sendLog: function (message, url, line, level) {
        this.number++;
        var text = this.number + '. ' + message + ' (file: ' + url + (line !== undefined ? ', line: ' + line : '') + ')';
        $.ajax({
              url: this.url
            , type: 'POST'
            , cache: false
            , data: {message: text, level: level}
        });
    }

};

Logger.url = '/log';

Logger.debug('Инициализация констант завершена.', 'menu.html');

window.onerror = function(message, url, line) {
    Logger.error(message, url, line);
};

Приоритет вызовов команд дебагера:
log (1) < debug (2) < info (3) < warn (4) < error (5)

Комментариев нет:

Отправить комментарий