Как отключить console.log, когда я не отлаживаю? - PullRequest
45 голосов
/ 21 сентября 2011

В моем коде много console.log ( или любых других консольных вызовов ), и я хотел бы использовать их только тогда, когда мое приложение находится в каком-то «режиме отладки» .

Кажется, я не могу использовать какую-то функцию логгера и внутренне использовать console.log, потому что тогда я бы не знал, какая строка сработала.Может быть, только с try / catch, но мои журналы очень общие, и я не хочу try / catch в своем коде.

Что бы вы порекомендовали?

Ответы [ 11 ]

48 голосов
/ 21 сентября 2011

Я бы, вероятно, злоупотребил бы короткозамкнутой природой логического оператора AND JavaScript и заменил бы экземпляры:

console.log("Foo.");

на:

DEBUG && console.log("Foo.");

Предполагая, что DEBUG - это глобальная переменная, которая оценивается в true, если включена отладка.

Эта стратегия позволяет избежать стерилизации console.log(), поэтому вы все равно можете вызывать ее в режиме выпуска, если у вас действительно есть(например, чтобы отследить проблему, которая не возникает в режиме отладки).

45 голосов
/ 21 сентября 2011

Просто замените console.log пустой функцией для производства.

if (!DEBUG_MODE_ON) {
    console = console || {};
    console.log = function(){};
}
28 голосов
/ 21 сентября 2011

Замыкание глобальных функций, как правило, плохая идея.

Вместо этого вы можете заменить все экземпляры console.log в своем коде на LOG, а в начале кода:

var LOG = debug ? console.log.bind(console) : function () {};

Это все равно покажет правильные номера строк, а также сохранит ожидаемую функцию console.log для сторонних устройств, если это необходимо.

14 голосов
/ 24 марта 2014

В настоящее время, в 2014 году, я просто использую GULP (и всем рекомендую, это потрясающий инструмент), и у меня установлен пакет, который называется stripDebug , который делает это длявы.

(я также использую uglify и closureCompiler в производстве)


Обновление (20 июня 2019 г.)

Есть Babel Macro , который автоматически удаляет все операторы console:

https://www.npmjs.com/package/dev-console.macro

4 голосов
/ 19 апреля 2015

Еще один способ отключить console.log в производственной среде и поддерживать его в разработке.

// overriding console.log in production
if(window.location.host.indexOf('localhost:9000') < 0) {
    console.log = function(){};
}

Вы можете изменить параметры разработки, такие как localhost и port.

1 голос
/ 21 сентября 2011

Simple.

Добавьте небольшой сценарий bash, который находит все ссылки на console.log и удаляет их.

Убедитесь, что этот пакетный сценарий выполняется как часть развертывания в рабочей среде.

Не используйте console.log как пустую функцию, это пустая трата вычислений и места.

0 голосов
/ 05 сентября 2018
Консоль

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

(function () {
    var method;
    var noop = function noop() { };
    var methods = [
    'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
    'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
    'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
    'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];
        console[method] = noop;
    }
}());

См. Подробный пост здесь https://stapp.space/disable-javascript-console-on-production/

0 голосов
/ 07 марта 2017

Это переопределение оболочки Tiny обернет оригинальный метод console.log функцией с проверкой внутри, которую вы можете контролировать извне, углубляясь, если хотите видеть журналы консоли, а нет.

Я выбрал window.allowConsole просто в качестве примера флага, но в реальных условиях это, вероятно, будет чем-то другим. в зависимости от ваших рамок.

(function(cl){
  console.log = function(){
    if( window.allowConsole )
      cl(...arguments); 
  }
})(console.log)

Использование:

// in development (allow logging)
window.allowConsole = true;
console.log(1,[1,2,3],{a:1});

// in production (disallow logging)
window.allowConsole = false;
console.log(1,[1,2,3],{a:1});

Это переопределение должно быть реализовано как можно более высоким в иерархии кода, чтобы оно «перехватывало» все журналы до того, как это произойдет. Это может быть расширено до всех других console методов, таких как warn, time, dir и т. Д.

0 голосов
/ 07 марта 2017
// In Development:
var debugMode = true

// In Prod:
var debugMode = false

// This function logs console messages when debugMode is true .
function debugLog(logMessage) {
    if (debugMode) {
        console.log(logMessage);
    }
}

// Use the function instead of console.log
debugLog("This is a debug message");
0 голосов
/ 12 июня 2016

enter image description here

В последних версиях Chrome показано, какая строка кода в каком файле запущена console.log. Если вы ищете систему управления журналами, вы можете попробовать logeek , которая позволяет вам контролировать, какие группы журналов вы хотите видеть.

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