366 Stimmen

Wie kann ich schnell und bequem alle console.log-Anweisungen in meinem Code deaktivieren?

Gibt es eine Möglichkeit, alle console.log Anweisungen in meinem JavaScript-Code zu Testzwecken?

540voto

SolutionYogi Punkte 30824

Definieren Sie die Funktion console.log in Ihrem Skript neu.

console.log = function() {}

Das war's, keine Meldungen mehr auf der Konsole.

EDIT :

Die Idee von Cide weiter ausbauen. Eine benutzerdefinierte Logger, die Sie verwenden können, um die Protokollierung ein/aus von Ihrem Code zu schalten.

Von meiner Firefox-Konsole aus:

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!');
    }
 );

Wie wird der oben genannte "Logger" verwendet? Rufen Sie in Ihrem Ready-Ereignis logger.disableLogger auf, damit keine Konsolenmeldungen protokolliert werden. Fügen Sie die Aufrufe logger.enableLogger und logger.disableLogger in die Methode ein, für die Sie Meldungen auf der Konsole protokollieren möchten.

100voto

mwilcox Punkte 3866

Der folgende Text ist ausführlicher:

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

Dadurch werden die gemeinsamen Methoden in der Konsole, sofern vorhanden, auf Null gesetzt, und sie können ohne Fehler und praktisch ohne Leistungseinbußen aufgerufen werden. Im Falle eines Browsers wie IE6, der keine Konsole hat, werden die Dummy-Methoden erstellt, um Fehler zu vermeiden. Natürlich gibt es noch viele weitere Funktionen in Firebug, wie trace, profile, time, etc. Sie können der Liste hinzugefügt werden, wenn Sie sie in Ihrem Code verwenden.

Sie können auch prüfen, ob der Debugger über diese speziellen Methoden verfügt oder nicht (z. B. IE) und die nicht unterstützten Methoden ausschließen:

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

37voto

André Eriksson Punkte 4148

Soweit ich das aus den Dokumentation Firebug stellt keine Variable zur Verfügung, um den Debug-Status umzuschalten. Stattdessen verpacken Sie console.log() in einen Wrapper, der es bedingt aufruft, d.h.:

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

Um nicht alle bestehenden Aufrufe ändern zu müssen, können Sie stattdessen dies verwenden:

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

31voto

istepaniuk Punkte 3566

Das sollten Sie nicht!

Es ist keine gute Praxis, eingebaute Funktionen zu überschreiben. Es gibt auch keine Garantie, dass Sie alle Ausgaben unterdrücken. Andere Bibliotheken, die Sie verwenden, können Ihre Änderungen rückgängig machen, und es gibt andere Funktionen, die auf die Konsole schreiben können; .dir() , .warning() , .error() , .debug() , .assert() etc.

Wie einige vorgeschlagen haben, könnten Sie eine DEBUG_MODE variabel und logarithmisch bedingt. Je nach Komplexität und Art Ihres Codes kann es eine gute Idee sein, ein eigenes Logger-Objekt bzw. eine eigene Logger-Funktion zu schreiben, die das Konsolen-Objekt umschließt und diese Fähigkeit eingebaut hat. Das wäre der richtige Ort, um sich mit Instrumentierung .

Zu "Testzwecken" können Sie jedoch Folgendes schreiben Tests anstatt auf der Konsole zu drucken. Wenn Sie keine Tests durchführen, und diese console.log() Zeilen waren nur ein Hilfsmittel, um Ihren Code zu schreiben, löschen Sie sie einfach .

23voto

Joey Schooley Punkte 401

Ich weiß, dass dies ein alter Beitrag ist, aber er erscheint immer noch ganz oben in den Google-Ergebnissen. Hier ist also eine elegantere Lösung ohne jQuery, die in den neuesten Chrome-, FF- und IE-Versionen funktioniert.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X