web-dev-qa-db-fra.com

Comment désactiver console.log lorsque je ne débogue pas?

J'en ai beaucoup console.log (ou tout autre appel de console) dans mon code et je voudrais les utiliser uniquement lorsque mon application est en quelque sorte "mode de débogage" .

Je n'arrive pas à utiliser une sorte de fonction d'enregistrement et à utiliser en interne console.log parce qu'alors je ne saurais pas quelle ligne l'a tiré. Peut-être seulement avec un try/catch, mais mes journaux sont très généraux et je ne veux pas try/catch dans mon code.

Que recommanderais-tu?

45
vsync

De nos jours, en 2014, j'utilise simplement GULP (et je le recommande à tous, c'est un outil incroyable), et j'ai installé un paquet qui s'appelle stripDebug qui fait ça pour vous.

(J'utilise également uglify et closureCompiler en production)


Mise à jour (20 juin 2019)

Il y a une Babel Macro qui supprime automatiquement toutes les instructions console:

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

14
vsync

J'abuserais probablement de la nature court-circuitage de JavaScript opérateur AND logique et remplacerais les instances de:

console.log("Foo.");

Avec:

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

En supposant que DEBUG est une variable globale qui est évaluée à true si le débogage est activé.

Cette stratégie évite la castration de console.log(), vous pouvez donc toujours l'appeler en mode release si vous en avez vraiment besoin (par exemple pour tracer un problème qui ne se produit pas en mode debug).

50
Frédéric Hamidi

Remplacez simplement le console.log par une fonction vide pour la production.

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

Clobber les fonctions globales est généralement une mauvaise idée.

Au lieu de cela, vous pouvez remplacer toutes les instances de console.log dans votre code avec LOG, et au début de votre code:

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

Cela affichera toujours les numéros de ligne corrects et préservera également le console.log fonction pour les trucs tiers si nécessaire.

29
namuol

Une autre façon de désactiver console.log en production et de le conserver en développement.

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

Vous pouvez modifier vos paramètres de développement comme localhost et port.

4
vinesh

Facile.

Ajoutez un petit script bash qui trouve toutes les références à console.log et les supprime.

Assurez-vous que ce script de commandes s'exécute dans le cadre de votre déploiement en production.

Ne cale pas console.log en tant que fonction vide, c'est un gaspillage de calcul et d'espace.

1
Raynos

enter image description here

Les dernières versions de chrome montrent quelle ligne de code dans quel fichier a lancé console.log. Si vous recherchez un système de gestion des journaux, vous pouvez essayer logeek it vous permet de contrôler les groupes de journaux que vous souhaitez voir.

0
Iman Mohamadi

la console peut afficher non seulement le journal, mais les avertissements d'erreur, etc. Voici une fonction pour remplacer toutes les sorties de la console

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

Reportez-vous à la publication détaillée ici https://stapp.space/disable-javascript-console-on-production/

0
Sachin Naik
// 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
deepakssn

Ce remplacement de wrapper minuscule encapsulera l'original console.log méthode avec une fonction qui contient une vérification, que vous pouvez contrôler de l'extérieur, approfondissant si vous voulez voir les journaux de la console et non.

J'ai choisi window.allowConsole juste comme un exemple de drapeau mais en utilisation réelle ce serait probablement autre chose. selon votre cadre.

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

Usage:

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

Ce remplacement doit être implémenté aussi "haut" que possible dans la hiérarchie de code afin qu'il "intercepte" tous les journaux avant qu'il ne se produise. Cela pourrait être étendu à toutes les autres méthodes console telles que warn, time, dir et ainsi de suite.

0
vsync

Ce code fonctionne pour moi:

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