152 votes

Remplacer console.log() ; pour la production

Je suis assez novice en matière de développement Javascript, donc cette question est peut-être celle d'un débutant.

J'ai un sencha-touch application criblée de console.log(); à des fins de débogage.

J'ai enjoué en combinant tous mes temps de construction. Il produit un app.debug.js pour le débogage ainsi qu'un app.min.js pour la production

Maintenant je pourrais parcourir tous mes fichiers de code à la recherche de console.log(); et le supprimer manuellement lorsque je suis prêt à passer en production, mais je me demande s'il existe un moyen de remplacer la méthode.

Fondamentalement, chaque fois que le console.log(); est appelée, NE RIEN FAIRE.

De cette façon, je peux placer le fichier de code de remplacement dans ma configuration de production, et NON dans ma configuration de débogage.

Est-ce possible ?

3 votes

Créer votre propre objet avec le nom console con log fonction qui ne fait rien/seulement définition de fonction.

8 votes

Voici un excellent moyen de remplacer le console.log fonction, tout en préservant la fonctionnalité originale de la fonction... udidu.blogspot.co.il/2012/12/override-console-functions.html

0 votes

Chase -- pouvez-vous me dire si ma fermeture en double est erronée ou non ? (alors je peux inverser)

238voto

Neal Points 68710

Mettez ceci en haut du fichier :

var console = {};
console.log = function(){};

Pour certains navigateurs et minifieurs, vous devrez peut-être l'appliquer à l'objet fenêtre.

window.console = console;

86 votes

N'oubliez pas de passer outre console.info , console.warn y console.error aussi, si vous utilisez ces

0 votes

@Flambino, je n'ai jamais utilisé console.info avant. En regardant la sortie de chacun d'eux, ils "semblent" être les mêmes... quelle est la différence, selon vous, entre log y info ?

0 votes

@rockinthesixstring : Comme le dit Neal, ils sont fondamentalement les mêmes ; ils ne font qu'imprimer des choses sur la console. Tout au plus, vous obtenez différentes petites icônes à côté de la ligne imprimée (par exemple, une icône d'avertissement pour quelque chose imprimé par warn ), et c'est tout. Mais c'est en fait très utile pour distinguer rapidement plusieurs messages de la console.

56voto

posit labs Points 1179

Il serait super utile de pouvoir activer la journalisation dans la version de production. Le code ci-dessous désactive la journalisation par défaut.

Lorsque j'ai besoin de voir les journaux, je tape simplement debug(true) dans la console.

var consoleHolder = console;
function debug(bool){
    if(!bool){
        consoleHolder = console;
        console = {};
        Object.keys(consoleHolder).forEach(function(key){
            console[key] = function(){};
        })
    }else{
        console = consoleHolder;
    }
}
debug(false);

Pour être complet, ceci remplace TOUTES les méthodes de la console, pas seulement console.log .

1 votes

Il fonctionne bien mais il faut supprimer la ligne consoleHolder = console ; when bool = false sur la ligne n°4. 4. Parce que cette ligne désactive cette fonction quand on appelle debug(false) deux fois continuellement. Nous ne pouvons pas appeler à nouveau debug(true) si nous avons déjà appelé debug(false);debug(false) ; signifie deux fois.

7voto

Zirak Points 13656
console.log = function(){};

Remplacez-la comme n'importe quelle autre chose.

20 votes

-1. Ne faites pas cela ! La ligne ici va à la fois lancer un ReferenceError et laisser console.log non défini sur les navigateurs où le console n'existe pas, ce qui est un problème pour au moins certaines versions d'IE. Si votre objectif est de rendre votre application web prête à être mise en production, comme le PO, alors c'est presque un problème. pas la solution dont vous avez besoin. Faites ce que Neal a écrit à la place.

6 votes

@MarkAmery Vous avez raison. J'ai pris le sens littéral de "override", comme dans "replace", donc bien sûr j'ai supposé qu'un original existait.

4voto

Pappa Points 801

Vous pouvez également utiliser une expression rationnelle pour supprimer tous les appels à console.log() dans votre code s'ils ne sont plus nécessaires. Tout bon IDE vous permettra de rechercher et de remplacer ces expressions dans l'ensemble d'un projet et de prévisualiser les correspondances avant de valider la modification.

\s*console\.log\([^)]+\);

1 votes

Merci pour le downvote. Je répondais à cette partie de la question. "Je pourrais parcourir tous mes fichiers de code à la recherche de console.log() ; et le supprimer manuellement lorsque je suis prêt à passer en production"

1 votes

Correspondra-t-il console.log("update() function called"); ?

1 votes

Non, malheureusement pas. Si vous ne vous attendez pas à ce que les journaux soient suivis d'un autre code, vous pouvez utiliser ce qui suit : \s *console \.log (.+) ; Mais c'est plus risqué.

3voto

Kayem Points 21

N'oubliez pas qu'avec cette méthode, chaque appel à console.log se traduit par un appel à une fonction (vide), ce qui entraîne une surcharge. S'il y a 100 commandes console.log, vous faites toujours 100 appels à une fonction vide.

Je ne suis pas sûr de l'ampleur de la surcharge que cela entraînerait, mais il y en aura, il serait préférable d'avoir un drapeau pour activer le débogage, puis d'utiliser quelque chose du genre :

var debug=true; if (debug) console.log('blah')

4 votes

Cela impliquerait de parcourir tout le code et d'ajouter ces instructions if, ce qui est fastidieux.

1 votes

Cela nécessite plus de code, mais cette technique a ses avantages : debug peuvent être basculées au moment de l'exécution ; et quand debug est faux, il n'y a pas de construction inefficace de chaînes de caractères qui seront immédiatement rejetées. Les développeurs peuvent donc écrire lourd logging sans nuire aux performances de production, tout en obtenant ces informations des clients s'ils en ont vraiment besoin.

0 votes

La bascule d'exécution est utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X