Как отключить console.log, когда я не отлаживаю?
В моем коде есть много console.log
(или любых других консольных вызовов), и я хотел бы использовать их только
когда мое приложение находится в каком-то "режиме отладки".
Я не могу использовать какую-то функцию logger и внутренне использовать console.log
, потому что тогда я не знаю, какая строка его выпустила. Может быть, только с try/catch, но мои журналы очень общие, и я не хочу try/catch в моем коде.
Что вы порекомендовали бы?
Ответы
Ответ 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
}
}
}),
]