Как быстро и удобно отключить все инструкции console.log в моем коде?

Можно ли отключить все инструкции console.log в моем JavaScript-коде для тестирования?

Ответ 1

Переопределите функцию console.log в script.

console.log = function() {}

Что это, больше нет сообщений для консоли.

EDIT:

Расширение идеи Cide. Пользовательский регистратор, который вы можете использовать для включения/выключения регистрации в вашем коде.

Из моей консоли Firefox:

JXLvK.png

var logger = function()
{
    var oldConsoleLog = null;
    var pub = {};

    pub.enableLogger =  function enableLogger() 
                        {
                            if(oldConsoleLog == null)
                                return;

                            window['console']['log'] = oldConsoleLog;
                        };

    pub.disableLogger = function disableLogger()
                        {
                            oldConsoleLog = console.log;
                            window['console']['log'] = function() {};
                        };

    return pub;
}();

$(document).ready(
    function()
    {
        console.log('hello');

        logger.disableLogger();
        console.log('hi', 'hiya');
        console.log('this wont show up in console');

        logger.enableLogger();
        console.log('This will show up!');
    }
 );

Как использовать вышеуказанный "logger"? В вашем готовом событии вызовите logger.disableLogger, чтобы сообщения консоли не регистрировались. Добавьте вызовы в logger.enableLogger и logger.disableLogger внутри метода, для которого вы хотите регистрировать сообщения на консоли.

Ответ 2

Далее более подробно:

var DEBUG = false;
if(!DEBUG){
    if(!window.console) window.console = {};
    var methods = ["log", "debug", "warn", "info"];
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

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

Вы также можете проверить, имеет ли отладчик эти специальные методы или нет (то есть IE) и нулевое значение, которое оно не поддерживает:

if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

Ответ 3

Насколько я могу судить из документации, Firebug не предоставляет какую-либо переменную для переключения состояния отладки. Вместо этого заверните console.log() в оболочку, которая условно вызывает его, то есть:

DEBUG = true; // set to false to disable debugging
function debug_log() {
    if ( DEBUG ) {
        console.log.apply(this, arguments);
    }
}

Чтобы не менять все существующие вызовы, вы можете использовать это вместо:

DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
    if ( DEBUG ) {
        old_console_log.apply(this, arguments);
    }
}

Ответ 4

Вы не должны!

Неправильно переписывать встроенные функции. Также нет гарантии, что вы подавите весь вывод, другие используемые библиотеки могут отменить ваши изменения, а также другие функции, которые могут быть записаны на консоль; .dir(), .warning(), .error(), .debug(), .assert() и т.д.

Как было предложено, вы можете определить переменную DEBUG_MODE и log условно. В зависимости от сложности и характера вашего кода, может быть хорошей идеей написать свой собственный объект/функцию регистрации, которая обертывается вокруг объекта консоли и имеет эту возможность. Это было бы подходящее место для работы с аппаратурой.

Тем не менее, для целей тестирования вы можете писать тесты вместо печати на консоль. Если вы не проводите никакого тестирования, и те строки console.log() были просто помощью для написания вашего кода, просто удалить их.

Ответ 5

Я понимаю, что это старый пост, но он по-прежнему всплывает в верхней части результатов Google, поэтому здесь представлено более элегантное решение, отличное от jQuery, которое работает в последних версиях Chrome, FF и IE.

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);

Ответ 6

Я знаю, что вы спросили, как отключить console.log, но это может быть то, что вы действительно после. Таким образом, вам не нужно явно включать или отключать консоль. Он просто предотвращает эти надоедливые ошибки консоли для людей, у которых его нет или нет.

if(typeof(console) === 'undefined') {
    var console = {};
    console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
}

Ответ 7

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

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}

Ответ 8

Я удивляюсь, что из всех этих ответов никто не объединяет:

  • Нет jquery
  • Анонимная функция, чтобы не загрязнять глобальное пространство имен
  • Случай с ручкой, где window.console не определен
  • Просто измените функцию .log на консоли

Я бы пошел на это:

(function () {

    var debug = false

    if (debug === false) {
        if ( typeof(window.console) === 'undefined') { window.console = {}; }
        window.console.log = function () {};
    }
})()

Ответ 9

Если вы используете IE7, консоль не будет определена. Таким образом, более дружественная версия IE будет:

if (typeof console == "undefined" || typeof console.log == "undefined") 
{
   var console = { log: function() {} }; 
}

Ответ 10

После того как я искал эту проблему и попробовал ее в своем приложении cordova, я просто хочу предупредить каждого разработчика о том, что Windows Phone не перезаписывает

    console.log

потому что приложение будет аварийно завершено при запуске.

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

Просто перезапишите

    window.console.log 

если вам нужно.

Это работает в моем приложении:

   try {
        if (typeof(window.console) != "undefined") {
            window.console = {};
            window.console.log = function () {
            };
            window.console.info = function () {
            };
            window.console.warn = function () {
            };
            window.console.error = function () {
            };
        }

        if (typeof(alert) !== "undefined") {
            alert = function ()
            {

            }
        }

    } catch (ex) {

    }

Ответ 11

Это гибрид ответов от SolutionYogi и Chris S. Он поддерживает номера строк в консоли и имя файла. Пример jsFiddle.

// Avoid global functions via a self calling anonymous one (uses jQuery)
(function(MYAPP, $, undefined) {
    // Prevent errors in browsers without console.log
    if (!window.console) window.console = {};
    if (!window.console.log) window.console.log = function(){};

    //Private var
    var console_log = console.log;  

    //Public methods
    MYAPP.enableLog = function enableLogger() { console.log = console_log; };   
    MYAPP.disableLog = function disableLogger() { console.log = function() {}; };

}(window.MYAPP = window.MYAPP || {}, jQuery));


// Example Usage:
$(function() {    
    MYAPP.disableLog();    
    console.log('this should not show');

    MYAPP.enableLog();
    console.log('This will show');
});

Ответ 12

Если вы используете Grunt, вы можете добавить задачу, чтобы удалить/комментировать инструкции console.log. Поэтому console.log больше не вызывается.

https://www.npmjs.org/package/grunt-remove-logging-calls

Ответ 13

Я использовал Уинстон регистратор ранее.

В настоящее время я использую приведенный ниже более простой код из опыта:

  1. Установите переменную среды из cmd/командной строки (в Windows):

    cmd
    setx LOG_LEVEL info
    

Или вы могли бы иметь переменную в своем коде, если хотите, но выше лучше.

  1. Перезапустите cmd/командную строку или IDE/редактор, как Netbeans

  2. Имейте ниже как код:

    console.debug = console.log;   // define debug function
    console.silly = console.log;   // define silly function
    
    switch (process.env.LOG_LEVEL) {
        case 'debug':
        case 'silly':
            // print everything
            break;
    
        case 'dir':
        case 'log':
            console.debug = function () {};
            console.silly = function () {};
            break;
    
        case 'info':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            break;
    
        case 'trace':   // similar to error, both may print stack trace/ frames
        case 'warn':    // since warn() function is an alias for error()
        case 'error':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            console.info = function () {};
            break;
    }
    
  3. Теперь используйте все консоли. * Как показано ниже:

    console.error(' this is a error message '); // will print
    console.warn(' this is a warn message '); // will print
    console.trace(' this is a trace message '); // will print
    console.info(' this is a info message '); // will print, LOG_LEVEL is set to this
    
    console.log(' this is a log message '); // will NOT print
    console.dir(' this is a dir message '); // will NOT print
    console.silly(' this is a silly message '); // will NOT print
    console.debug(' this is a debug message '); // will NOT print
    

Теперь, основываясь на ваших настройках LOG_LEVEL, сделанных в точке 1 (например, setx LOG_LEVEL log и перезапустите командную строку), некоторые из вышеперечисленных будут напечатаны, другие не будут печатать

Надеюсь, что это помогло.

Ответ 14

Предупреждение: Бесстыдный плагин!

Вы также можете использовать что-то вроде моего объекта JsTrace для модульной трассировки с возможностью "переключения" на уровне модуля, чтобы включить только то, что вы хотите видеть в то время.

http://jstrace.codeplex.com

(Также есть пакет NuGet для тех, кто интересуется)

По умолчанию все уровни "ошибка", хотя вы можете отключить их "выключено". Хотя, я не могу придумать, почему вы НЕ хотите видеть ошибки

Вы можете изменить их следующим образом:

Trace.traceLevel('ModuleName1', Trace.Levels.log);
Trace.traceLevel('ModuleName2', Trace.Levels.info);

За дополнительной информацией обратитесь к Документация

Т

Ответ 15

Я нашел немного более продвинутый фрагмент кода в этом URL Совет JavaScript: Bust и Disable console.log:

var DEBUG_MODE = true; // Set this value to false for production

if(typeof(console) === 'undefined') {
   console = {}
}

if(!DEBUG_MODE || typeof(console.log) === 'undefined') {
   // FYI: Firebug might get cranky...
   console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time =    console.timeEnd = console.assert = console.profile = function() {};
}

Ответ 16

Я разработал библиотеку для этой утилиты: https://github.com/sunnykgupta/jsLogger

Особенности:

  • Он безопасно переопределяет console.log.
  • Обращает на себя внимание, если консоль недоступна (о да, это тоже необходимо учитывать.)
  • Сохраняет все журналы (даже если они подавлены) для последующего поиска.
  • Управляет основными функциями консоли, такими как log, warn, error, info.

Открыт для изменений и будет обновляться при появлении новых предложений.

Ответ 17

Это должно переопределить все методы window.console. Вы можете поместить его в самую верхнюю часть раздела ваших скриптов, и если вы находитесь на фреймворке, вы можете распечатать этот код только в том случае, когда среда вашего приложения является производством, или если какой-то флаг отладки отключен. Затем вы будете иметь все свои журналы в своем коде, работающие в средах разработки или в режиме отладки.

window.console = (function(originalConsole){
    var api = {};
    var props = Object.keys(originalConsole);
    for (var i=0; i<props.length; i++) {
        api[props[i]] = function(){};
    }
    return api;
})(window.console);

Ответ 18

Для решения проблемы я использовал следующее: -

var debug = 1;
var logger = function(a,b){ if ( debug == 1 ) console.log(a, b || "");};

Установите для отладки значение 1, чтобы включить отладку. Затем используйте функцию регистрации при выводе текста отладки. Он также настроен на принятие двух параметров.

Итак, вместо

console.log("my","log");

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

logger("my","log");

Ответ 19

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

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

Ответ 20

Мое комплексное решение для отключения/переопределения всех функций console.* - здесь.

Конечно, убедитесь, что вы включили его после проверки необходимого контекста. Например, только включение в выпуск продукции, это не бомбардировка каких-либо других важных компонентов и т.д.

Цитирую это здесь:

"use strict";
(() => {
  var console = (window.console = window.console || {});
  [
    "assert", "clear", "count", "debug", "dir", "dirxml",
    "error", "exception", "group", "groupCollapsed", "groupEnd",
    "info", "log", "markTimeline", "profile", "profileEnd", "table",
    "time", "timeEnd", "timeStamp", "trace", "warn"
  ].forEach(method => {
    console[method] = () => {};
  });
  console.log("This message shouldn't be visible in console log");
})();

Ответ 21

Если вы используете gulp, тогда вы можете использовать этот плагин:

Установите этот плагин с помощью команды:

npm install gulp-remove-logging

Затем добавьте эту строку в свой файл gulpfile:

var gulp_remove_logging = require("gulp-remove-logging");

Lastly, add the configuration settings (see below) to your gulpfile.

Task Configuration

gulp.task("remove_logging", function() {
     return gulp.src("src/javascripts/**/*.js")
    .pipe(
      gulp_remove_logging()
    )
    .pipe(
      gulp.dest(
        "build/javascripts/"
      )
    ); });

Ответ 22

Упрощение fooobar.com/questions/16981/...

switch (process.env.LOG_LEVEL) {
  case 'ERROR':
    console.warn = function() {};
  case 'WARN':
    console.info = function() {};
  case 'INFO':
    console.log = function() {};
  case 'LOG':
    console.debug = function() {};
    console.dir = function() {};
}

Ответ 23

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

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

Ответ 24

Вы можете использовать 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') полностью отключить каждое сообщение журнала.

Ответ 25

Проведя некоторые исследования и разработки для этой проблемы, я наткнулся на это решение, которое будет скрывать предупреждения/ошибки/журналы по вашему выбору.

    (function () {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function () {        
        console.warn = function () { };
        window['console']['warn'] = function () { };
        this.addEventListener('load', function () {                        
            console.warn('Something bad happened.');
            window['console']['warn'] = function () { };
        });        
    };
})();

Добавьте этот код перед плагином JQuery (например,/../jquery.min.js), даже если этот код JavaScript не требует JQuery. Потому что некоторые предупреждения есть в самом JQuery.

Спасибо!!