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

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

Ответы [ 23 ]

5 голосов
/ 09 января 2013

Это гибрид ответов от SolutionYogi и Chris S. Он поддерживает номера строк console.log и имя файла. Пример 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');
});
3 голосов
/ 15 октября 2014

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

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

2 голосов
/ 13 сентября 2017

Я использовал winston logger ранее.

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

  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 и перезапустите командную строку), некоторые из перечисленных выше будут напечатаны, другие не будут печатать

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

2 голосов
/ 08 мая 2017

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

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

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

Итак, вместо

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

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

logger("my","log");
2 голосов
/ 26 апреля 2017

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

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);
2 голосов
/ 04 июля 2016

Я разработал библиотеку для этого варианта использования: https://github.com/sunnykgupta/jsLogger

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

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

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

2 голосов
/ 02 марта 2012

Предупреждение: бесстыдная вилка!

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

http://jstrace.codeplex.com

(также есть пакет NuGet, для тех, кто заботится)

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

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

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

Для получения дополнительной документации, ознакомьтесь с Документация

T

1 голос
/ 18 августа 2018

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

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

npm install gulp-remove-logging

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

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

Наконец, добавьте параметры конфигурации (см. Ниже) в ваш файл gulpfile.

Конфигурация задачи

gulp.task("remove_logging", function() {
     return gulp.src("src/javascripts/**/*.js")
    .pipe(
      gulp_remove_logging()
    )
    .pipe(
      gulp.dest(
        "build/javascripts/"
      )
    ); });
1 голос
/ 29 мая 2018

Мое комплексное решение для отключения / переопределения всех 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");
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...