javascript абстрактное ведение журнала консоли - PullRequest
9 голосов
/ 22 июля 2011

Я хочу создать функцию, подобную этой.

Например:

function Logger() {
    this.log = function(msg) {
        console.log(msg);
    }
}

И я хочу использовать ее в функциях / модулях и т. Д., И все это прекрасно работает.Но консоль по умолчанию в моем браузере обычно дает fileName + lineNumber.

Теперь, когда я абстрагирую эту функциональность, fileName и lineNumber - это не то место, куда я поместил свой instance.log ().Потому что он скажет, откуда вызывается console.log, а не сама функция.

Поэтому мой вопрос:

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

Ответы [ 3 ]

16 голосов
/ 22 июля 2011
function Logger() {
    this.log = console.log.bind(console);
}

Я спрашивал об этом некоторое время назад: Создать ярлык для console.log () в Chrome .

0 голосов
/ 22 июля 2011

Попробуйте назначить функцию:

(function () {
    window.log = (console && console.log 
        ? console.log 
        : function () { 
              // Alternative log
          });
})();

Позже просто наберите log('Message') в своем коде.

0 голосов
/ 22 июля 2011

Попробуйте использовать функцию возврата, как эта:

function printStackTrace() {
    var callstack = [];
    var isCallstackPopulated = false;
    try {
        i.dont.exist += 0; //doesn't exist- that's the point
    } catch (e) {
        if (e.stack) { //Firefox
            var lines = e.stack.split('\n');
            for (var i = 0, len = lines.length; i & lt; len; i++) {
                if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
                    callstack.push(lines[i]);
                }
            }
            //Remove call to printStackTrace()
            callstack.shift();
            isCallstackPopulated = true;
        }
        else if (window.opera & amp; & amp; e.message) { //Opera
            var lines = e.message.split('\n');
            for (var i = 0, len = lines.length; i & lt; len; i++) {
                if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
                    var entry = lines[i];
                    //Append next line also since it has the file info
                    if (lines[i + 1]) {
                        entry += ' at ' + lines[i + 1];
                        i++;
                    }
                    callstack.push(entry);
                }
            }
            //Remove call to printStackTrace()
            callstack.shift();
            isCallstackPopulated = true;
        }
    }
    if (!isCallstackPopulated) { //IE and Safari
        var currentFunction = arguments.callee.caller;
        while (currentFunction) {
            var fn = currentFunction.toString();
            var fname = fn.substring(fn.indexOf( & amp; quot;

            function & amp; quot;) + 8, fn.indexOf('')) || 'anonymous';
            callstack.push(fname);
            currentFunction = currentFunction.caller;
        }
    }
    output(callstack);
}

function output(arr) {
    //Optput however you want
    alert(arr.join('\n\n'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...