Frage

Ich habe eine Menge console.log() Aufrufe in meinem JavaScript.

Sollte ich sie auskommentieren, bevor ich sie in der Produktion bereitstelle?

Ich möchte sie einfach dort belassen, damit ich mir nicht die Mühe machen muss, die Kommentare später erneut hinzuzufügen, wenn ich weitere Debugging-Vorgänge durchführen muss.Ist das eine schlechte Idee?

War es hilfreich?

Lösung

Es wird Javascript-Fehler verursachen, Beenden der Ausführung des Blocks von Javascript um den Fehler enthält.

Sie könnten, definieren jedoch eine Dummy-Funktion, die ein no-op ist, wenn Firebug nicht aktiv ist:

if(typeof console === "undefined") {
    console = { log: function() { } };
}

Wenn Sie Methoden verwenden, um andere als log, müssen Sie diese ebenfalls Stub.

Andere Tipps

Wie andere haben bereits darauf, es zu verlassen in werden Fehler in einigen Browsern verursachen, aber diese Fehler umgangen werden kann in einigen Stubs, indem.

Aber ich würde sich nicht nur kommentieren, sondern geradezu diese Zeilen entfernen. Es scheint nur schlampig anders zu machen. Vielleicht pedantisch ich, aber ich glaube nicht, dass „Produktion“ Code sollte „debug“ Code überhaupt, auch in kommentierten Form enthalten. Wenn Sie Kommentare hinterlassen überhaupt in, sollten diese Kommentare beschreiben, was der Code tut, oder die Begründung dahinter - nicht blockiert behinderten Code. (Obwohl, sollten die meisten Kommentare automatisch von Ihrem Verkleinerungsprozess entfernt werden. Sie sind zu minimieren, nicht wahr?)

Auch in mehreren Jahren mit JavaScript arbeitet, kann ich nicht immer wieder zu zurück auf eine Funktion kommen und sagen: „Gee, ich wünsche ich hier jene console.logs an Ort und Stelle gelassen habe!“ Im Allgemeinen, wenn ich „fertig“ mit der Arbeit an einer Funktion bin und später zurück, um es zu kommen, ich komme wieder ein anderes Problem zu beheben. Was auch immer das neue Problem ist, wenn die console.logs aus einer früheren Runde der Arbeit hilfreich sein könnten, dann würde ich das Problem das erste Mal entdeckt habe. Mit anderen Worten, wenn ich wieder zu etwas komme, bin ich wahrscheinlich nicht genau die gleichen Debug-Informationen müssen, wie ich bei früheren Gelegenheiten benötigt wird.

Just my two cents ... Viel Glück!

Wenn Sie einen Bereitstellungsskript haben, können Sie es verwenden, um die Anrufe strippen, um console.log (und minify die Datei).

Während Sie gerade dabei sind, können Sie Ihre JS durch JSLint werfen können und melden Sie sich die Verletzungen für die Inspektion (oder den Einsatz verhindern).

Dies ist ein gutes Beispiel dafür, warum Sie Ihre Bereitstellung zu automatisieren. Wenn Ihr Prozess ermöglicht es Ihnen, eine JS-Datei mit console.logs in ihr zu veröffentlichen, an einem gewissen Punkt, den Sie wird es tun.

Mein Wissen gibt es keine kürzere Methode des Ausdrückens console.log als die folgenden 45 Zeichen:

window.console||(console={log:function(){}});

Das ist die erste von drei verschiedenen Versionen je nachdem, welcher Konsole Methoden, die Sie alle von ihnen Stub wollen, sind winzig und alle haben in IE6 + und modernen Browsern getestet.

Die beiden anderen Versionen unterschiedlicher andere Konsole Methoden decken. Man deckt die vier Grundlagen und der andere deckt alle bekannten Konsole Methoden für Firebug und Webkit. in der kleinsten Datei wieder, Größen möglich.

Das Projekt ist auf GitHub: https://github.com/andyet/ConsoleDummy.js

Wenn Sie irgendeine Weise denken können den Code weiter, Beiträge zu minimieren sind willkommen.

- EDIT - 16. Mai 2012

Ich habe auf diesem Code seit verbessert. Es ist immer noch klein, aber bietet die Möglichkeit, die Ausgabe der Konsole ein- und ausschalten: https://github.com/HenrikJoreteg/andlog

Es wurde auf dem Changelog gekennzeichnet Show

Sie sollten zumindest einen Dummy-console.log erstellen, wenn das Objekt nicht existiert, damit Ihr Code Fehler nicht auf den Computern der Benutzer ohne Firebug installiert werfen.

Eine andere Möglichkeit wäre, nur in ‚Debug-Modus‘ auslösen Anmeldung, dh, wenn eine bestimmte Flag gesetzt:

if(_debug) console.log('foo');
_debug && console.log('foo');

Hoffe, es hilft jemand. - Ich einen Wrapper für sie schrieb, vor einiger Zeit seine etwas flexibler als die akzeptierte Lösung

Selbstverständlich, wenn Sie andere Methoden verwenden, wie console.info etc, können Sie den Effekt replizieren. wenn Sie mit Ihrer Staging-Umgebung getan, einfach die Standardeinstellung ändern C.debug auf false für die Herstellung und Sie werden keinen anderen Code ändern müssen / nehmen Linien aus usw. Sehr einfach zu und Debug kommt später wieder auf.

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");

für mich scheint zu funktionieren ...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}

Dachte, ich würde eine andere Perspektive teilen. Verlassen dieser Art der Ausgabe sichtbar nach außen in einer PCI-Anwendung macht Sie nicht konform.

Ich stimme zu, dass der Konsolen-Stub ein guter Ansatz ist.Ich habe verschiedene Konsolen-Plugins und Codeschnipsel ausprobiert, darunter auch einige recht komplexe.Sie alle hatten in mindestens einem Browser ein Problem, also habe ich mich für etwas Einfaches wie das Folgende entschieden, das eine Kombination aus anderen Snippets, die ich gesehen habe, und einigen Vorschlägen des YUI-Teams ist.Es scheint in IE8+, Firefox, Chrome und Safari (für Windows) zu funktionieren.

// To disable logging when posting a production release, just change this to false.
var debugMode = false;

// Support logging to console in all browsers even if the console is disabled. 
var log = function (msg) {
    debugMode && window.console && console.log ? console.log(msg) : null;
};

Notiz: Es unterstützt die Deaktivierung der Protokollierung an der Konsole über ein Flag.Vielleicht könnten Sie dies auch über Build-Skripte automatisieren.Alternativ können Sie die Benutzeroberfläche oder einen anderen Mechanismus bereitstellen, um dieses Flag zur Laufzeit umzudrehen.Sie können natürlich viel ausgefeilter vorgehen, mit Protokollierungsstufen, Ajax-Übermittlung von Protokollen basierend auf dem Protokollschwellenwert (z. B.alle Error-Level-Anweisungen werden an den Server zur Speicherung dort übertragen usw.).

Viele dieser Threads/Fragen rund um die Protokollierung scheinen Protokollanweisungen als Debug-Code und nicht als Code zu betrachten Instrumentierung.Daher der Wunsch, die Protokollanweisungen zu entfernen.Die Instrumentierung ist äußerst nützlich, wenn eine Anwendung im Umlauf ist und es nicht mehr so ​​einfach ist, einen Debugger anzuschließen oder Informationen von einem Benutzer oder über den Support an Sie weitergegeben werden.Sie sollten niemals sensible Daten protokollieren, unabhängig davon, wo sie protokolliert wurden, damit die Privatsphäre/Sicherheit nicht gefährdet wird.Wenn Sie sich die Protokollierung als Instrumentierung vorstellen, wird sie nun zum Produktionscode und sollte nach demselben Standard geschrieben werden.

Bei Anwendungen, die immer komplexeres Javascript verwenden, halte ich die Instrumentierung für entscheidend.

Wie andere haben erwähnt es einen Fehler in den meisten Browsern geworfen. In Firefox 4 wird es nicht einen Fehler aus, die Nachricht in der Web-Entwickler-Konsole (neu in Firefox 4) angemeldet ist.

Eine Abhilfe für solche Fehler, die mir sehr gut gefallen war de && Fehler :

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);

Ein schöner Einzeiler:

(!console) ? console.log=function(){} : console.log('Logging is supported.');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top