Подтвердить что ты не робот

Как отключить console.log, когда я не отлаживаю?

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

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

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

4b9b3361

Ответ 1

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

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


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

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

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

Ответ 2

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

console.log("Foo.");

С

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

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

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

Ответ 3

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

if (!DEBUG_MODE_ON) {
    console = console || {};
    console.log = function(){};
}

Ответ 4

Сплошные глобальные функции - это, как правило, плохая идея.

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

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

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

Ответ 5

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

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

Вы можете изменить настройки своего развития, такие как localhost и порт.

Ответ 6

Simple.

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

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

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

Ответ 7

Этот код работает для меня:

if(console=='undefined' || !console || console==null) {
  var console = {
    log : function (string) {
        // nothing to do here!!
    }
  }
}

Ответ 8

введите описание изображения здесь

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

Ответ 9

// 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");

Ответ 10

Это крошечное переопределение оболочки обернет исходный метод 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 и т.д.

Ответ 11

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

(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;
    }
}());

Ответ 12

Если вы используете Webpack, вы можете использовать плагин Terser с опциями drop_console или pure_funcs.

minimizer: [
    new TerserPlugin({
        terserOptions: {
            compress: {
                drop_console: true
            }
        }
    }),
]