Как быстро и удобно отключить все операторы console.log в моем коде? - PullRequest
219 голосов
/ 01 августа 2009

Есть ли способ отключить все операторы console.log в моем коде JavaScript для тестирования?

Ответы [ 23 ]

1 голос
/ 12 ноября 2016

Я написал это:

//Make a copy of the old console.
var oldConsole = Object.assign({}, console);

//This function redefine the caller with the original one. (well, at least i expect this to work in chrome, not tested in others)
function setEnabled(bool) {
    if (bool) {
        //Rewrites the disable function with the original one.
        console[this.name] = oldConsole[this.name];
        //Make sure the setEnable will be callable from original one.
        console[this.name].setEnabled = setEnabled;
    } else {
        //Rewrites the original.
        var fn = function () {/*function disabled, to enable call console.fn.setEnabled(true)*/};
        //Defines the name, to remember.
        Object.defineProperty(fn, "name", {value: this.name});
        //replace the original with the empty one.
        console[this.name] = fn;
        //set the enable function
        console[this.name].setEnabled = setEnabled

    }
}

К сожалению, он не работает при использовании строгого режима.

Таким образом, используя console.fn.setEnabled = setEnabled, а затем console.fn.setEnabled(false), где fn может быть практически любой консольной функцией. Для вашего случая будет:

console.log.setEnabled = setEnabled;
console.log.setEnabled(false);

Я тоже написал это:

var FLAGS = {};
    FLAGS.DEBUG = true;
    FLAGS.INFO = false;
    FLAGS.LOG = false;
    //Adding dir, table, or other would put the setEnabled on the respective console functions.

function makeThemSwitchable(opt) {
    var keysArr = Object.keys(opt);
    //its better use this type of for.
    for (var x = 0; x < keysArr.length; x++) {
        var key = keysArr[x];
        var lowerKey = key.toLowerCase();
        //Only if the key exists
        if (console[lowerKey]) {
            //define the function
            console[lowerKey].setEnabled = setEnabled;
            //Make it enabled/disabled by key.
            console[lowerKey].setEnabled(opt[key]);
        }
    }
}
//Put the set enabled function on the original console using the defined flags and set them.
makeThemSwitchable(FLAGS);

так что вам просто нужно ввести FLAGS значение по умолчанию (перед выполнением вышеуказанного кода), например FLAGS.LOG = false, и функция журнала будет отключена по умолчанию, и все же вы можете включить ее, вызывая console.log.setEnabled(true)

0 голосов
/ 12 июня 2016

Вы можете использовать logeek , это позволяет вам контролировать видимость ваших сообщений журнала. Вот как вы это делаете:

<script src="bower_components/dist/logeek.js"></script>

logeek.show('security');

logeek('some message').at('copy');       //this won't be logged
logeek('other message').at('secturity'); //this would be logged

Вы также можете logeek.show('nothing') полностью отключить каждое сообщение журнала.

0 голосов
/ 31 мая 2012

Вы можете использовать javascript AOP (например, jquery-aop ), чтобы перехватывать все вызовы console.debug / log (вокруг) и не продолжать фактический вызов, если для некоторой глобальной переменной задано значение false.

Вы могли бы даже сделать ajax-вызов (время от времени), чтобы вы могли изменить поведение включенного / отключенного журнала на сервере, что может быть очень интересно для включения отладки при возникновении проблемы в промежуточной среде или подобной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...