Gibt es eine Möglichkeit, alle console.log
Anweisungen in meinem JavaScript-Code zu Testzwecken zu deaktivieren?
javascript
debugging
console
Zack Burt
quelle
quelle
PICOLOG_LEVEL
(Knoten) und es ist Super klein. Weniger als 900 Bytes minimiert und gezippt. Haftungsausschluss: Ich bin der Autor.console
Funktionen zu überschreiben . Schauen Sie sich einfach stapp.space/disable-javascript-console-on-productionAntworten:
Definieren Sie die Funktion console.log in Ihrem Skript neu.
Das war's, keine Nachrichten mehr an die Konsole.
BEARBEITEN:
Cides Idee erweitern. Ein benutzerdefinierter Logger, mit dem Sie die Anmeldung von Ihrem Code ein- und ausschalten können.
Von meiner Firefox-Konsole:
Wie benutzt man den obigen 'Logger'? Rufen Sie in Ihrem Bereitschaftsereignis logger.disableLogger auf, damit Konsolennachrichten nicht protokolliert werden. Fügen Sie logger.enableLogger und logger.disableLogger Aufrufe innerhalb der Methode hinzu, für die Sie Nachrichten an der Konsole protokollieren möchten.
quelle
console.log
... Warum nicht einfach eine boolesche und eine bedingte Funktion für die Protokollierung haben?Folgendes ist gründlicher:
Dadurch werden die gängigen Methoden in der Konsole auf Null gesetzt, sofern vorhanden. Sie können fehlerfrei und praktisch ohne Leistungsaufwand aufgerufen werden. Bei einem Browser wie IE6 ohne Konsole werden die Dummy-Methoden erstellt, um Fehler zu vermeiden. Natürlich gibt es in Firebug noch viele weitere Funktionen wie Ablaufverfolgung, Profil, Zeit usw. Sie können der Liste hinzugefügt werden, wenn Sie sie in Ihrem Code verwenden.
Sie können auch überprüfen, ob der Debugger über diese speziellen Methoden verfügt oder nicht (z. B. IE), und die nicht unterstützten Methoden auf Null setzen:
quelle
Soweit ich der Dokumentation entnehmen kann, liefert Firebug keine Variable zum Umschalten des Debug-Status. Wickeln Sie stattdessen console.log () in einen Wrapper ein, der ihn bedingt aufruft, dh:
Um nicht alle vorhandenen Anrufe ändern zu müssen, können Sie stattdessen Folgendes verwenden:
quelle
Du solltest nicht!
Es ist keine gute Praxis, integrierte Funktionen zu überschreiben. Es gibt auch keine Garantie dafür, 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 möglicherweise in die Konsole schreiben.
.dir()
,.warning()
,.error()
,.debug()
,.assert()
Usw.Wie einige vorgeschlagen haben, können Sie eine
DEBUG_MODE
Variable definieren und bedingt protokollieren. Abhängig von der Komplexität und Art Ihres Codes kann es eine gute Idee sein, ein eigenes Logger-Objekt / eine eigene Logger-Funktion zu schreiben, die das Konsolenobjekt umschließt und über diese integrierte Funktion verfügt. Das wäre der richtige Ort, um sich mit Instrumentierung zu befassen .Zu Testzwecken können Sie jedoch Tests schreiben , anstatt auf die Konsole zu drucken. Wenn Sie keine Tests durchführen und diese
console.log()
Zeilen nur eine Hilfe zum Schreiben Ihres Codes waren, löschen Sie sie einfach .quelle
"other libraries you use may revert your changes"
: Wenn ich gleichconsole.log
zu Beginn deaktiviere , können sie nicht zur alten Funktion zurückkehren. Nun, sie können denconsole.log
Quellcode neu schreiben , aber warum?"it may be a good idea to write your own logger object/function that wraps around the console object"
: Ich habe das in der Vergangenheit gemacht und es ist eine schlechte Idee. Die Ablaufverfolgung der Konsolenausgabe bezieht sich auf den Wrapper und nicht auf die Zeile, die ihn aufruft, was das Debuggen erschwert.console.log('Look ma, it reaches this point');
in Ihrem Code zu hacken. Wenn alles andere fehlschlägt, können Sie diedebugger;
Anweisung tatsächlich verwenden ."the code is coupled to that infrastructure"
: der Code wahrscheinlich, aber das Muster nicht. Wenn Sie eine allgemeine Basisvorlage für Ihre Seiten erstellen, auf der die Protokollierungsfunktionen deaktiviert sind, können Sie diese Logik überall anwenden."the later shouldn't be browser-aware"
: Nun, also sollten Sie JS: PMir ist klar, dass dies ein alter Beitrag ist, der jedoch immer noch ganz oben in den Google-Ergebnissen angezeigt wird. Hier ist eine elegantere Nicht-jQuery-Lösung, die in den neuesten Versionen von Chrome, FF und IE funktioniert.
quelle
Ich weiß, dass Sie gefragt haben, wie Sie console.log deaktivieren sollen, aber das ist möglicherweise das, wonach Sie wirklich suchen. Auf diese Weise müssen Sie die Konsole nicht explizit aktivieren oder deaktivieren. Es verhindert einfach diese lästigen Konsolenfehler für Leute, die es nicht geöffnet oder installiert haben.
quelle
Ändern Sie einfach das Flag
DEBUG
, um die Funktion console.log zu überschreiben. Dies sollte den Trick tun.quelle
function myLog(msg) { if (debug) { console.log(msg); } }
Ich bin überrascht, dass von all diesen Antworten niemand kombiniert:
Ich würde das machen:
quelle
Nachdem ich auch nach diesem Problem gesucht und es in meiner Cordova-App ausprobiert habe, möchte ich nur jeden Entwickler warnen, dass Windows Phone nicht überschrieben wird
weil die App beim Start abstürzt.
Es stürzt nicht ab, wenn Sie mit etwas Glück lokal entwickeln. Wenn Sie es jedoch im Geschäft einreichen, stürzt die App ab.
Einfach überschreiben
wenn du musst.
Das funktioniert in meiner App:
quelle
Wenn Sie IE7 verwenden, wird die Konsole nicht definiert. Eine IE-freundlichere Version wäre also:
quelle
Dies ist eine Mischung aus Antworten von SolutionYogi und Chris S. Es werden die Zeilennummern und der Dateiname von console.log beibehalten. Beispiel jsFiddle .
quelle
Wenn Sie Grunt verwenden, können Sie eine Aufgabe hinzufügen, um die Anweisungen console.log zu entfernen / zu kommentieren. Daher wird die console.log nicht mehr aufgerufen.
https://www.npmjs.org/package/grunt-remove-logging-calls
quelle
Ich habe Folgendes verwendet, um das Problem zu lösen:
Setzen Sie debug auf 1, um das Debuggen zu aktivieren. Verwenden Sie dann die Logger-Funktion, wenn Sie Debug-Text ausgeben. Es ist auch so eingerichtet, dass zwei Parameter akzeptiert werden.
Also statt
verwenden
quelle
Ich habe Winston benutzt Logger früher verwendet.
Heutzutage verwende ich aus Erfahrung einfacheren Code:
Legen Sie die Umgebungsvariable über cmd / Befehlszeile fest (unter Windows):
Oder Sie könnten eine Variable in Ihrem Code haben, wenn Sie möchten, aber oben ist besser.
Starten Sie cmd / command line oder IDE / editor wie Netbeans neu
Habe unten wie Code:
Verwenden Sie jetzt alle Konsolen. * Wie folgt:
Nun, basierend auf Ihren LOG_LEVEL-Einstellungen, die in Punkt 1 vorgenommen wurden (wie z.
setx LOG_LEVEL log
und Befehlszeile neu starten), werden einige der oben gedruckt, andere werden nicht gedrucktHoffe das hat geholfen.
quelle
Achtung: Schamloser Stecker!
Sie können auch so etwas wie mein JsTrace-Objekt verwenden, um eine modulare Ablaufverfolgung mit "Switching" -Funktion auf Modulebene zu haben, mit der Sie nur das aktivieren können, was Sie gerade sehen möchten.
http://jstrace.codeplex.com
(Hat auch ein NuGet-Paket für diejenigen, die sich interessieren)
Alle Ebenen sind standardmäßig auf "Fehler" eingestellt, obwohl Sie sie "ausschalten" können. Ich kann mir allerdings nicht vorstellen, warum Sie KEINE Fehler sehen möchten
Sie können sie folgendermaßen ändern:
Weitere Dokumente finden Sie in der Dokumentation
T.
quelle
Ich habe in dieser URL einen etwas fortgeschritteneren Code gefunden. JavaScript-Tipp: Bust and Disable console.log :
quelle
Ich habe eine Bibliothek für diesen Anwendungsfall entwickelt: https://github.com/sunnykgupta/jsLogger
Eigenschaften:
log
,warn
,error
,info
.Ist offen für Änderungen und wird aktualisiert, sobald neue Vorschläge auftauchen.
quelle
Dies sollte alle Methoden von window.console überschreiben. Sie können es ganz oben in Ihren Skriptbereich einfügen. Wenn Sie sich in einem PHP-Framework befinden, können Sie diesen Code nur drucken, wenn Ihre App-Umgebung produziert wird oder wenn eine Art Debug-Flag deaktiviert ist. Dann würden alle Ihre Protokolle in Ihrem Code in Entwicklungsumgebungen oder im Debug-Modus funktionieren.
quelle
Ich habe das geschrieben:
Leider funktioniert es nicht im strikten Modus.
Also mit
console.fn.setEnabled = setEnabled
undconsole.fn.setEnabled(false)
wofn
könnte dann fast jede Konsolenfunktion sein. Für Ihren Fall wäre:Ich habe das auch geschrieben:
Dann müssen Sie nur noch
FLAGS
den Standardwert eingeben (bevor Sie den obigen Code ausführen),FLAGS.LOG = false
und die Protokollfunktion ist standardmäßig deaktiviert, und Sie können den Aufruf trotzdem aktivierenconsole.log.setEnabled(true)
quelle
console.log.setEnabled(true)
Protokolle aus und sehen Sie sie anvar debug = false; debug && console.log(1/3)
Da Sie den Protokollinhalt nicht auswerten müssen, wenn er nicht aktiviert ist (in diesem Fall1/3
wird er nicht ausgewertet), verlieren Sie die Anruferleitung nicht und können ihn aktivieren es auch leicht (wenn nicht vars als consts).Meine umfassende Lösung zum Deaktivieren / Überschreiben aller
console.*
Funktionen ist hier .Stellen Sie natürlich sicher, dass Sie es einschließen, nachdem Sie den erforderlichen Kontext überprüft haben. Zum Beispiel bombardiert es nur andere wichtige Komponenten usw., wenn es nur in der Produktionsversion enthalten ist.
Hier zitieren:
quelle
Wenn Sie gulp verwenden, können Sie dieses Plugin verwenden:
quelle
Eine Vereinfachung von https://stackoverflow.com/a/46189791/871166
quelle
Sie können Javascript AOP verwenden (z. B. jquery-aop ) verwenden, um alle Aufrufe von console.debug / log (around) abzufangen und nicht mit dem eigentlichen Aufruf fortzufahren, wenn eine globale Variable auf false gesetzt ist.
Sie können sogar (ab und zu) einen Ajax-Aufruf ausführen, um das Verhalten des aktivierten / deaktivierten Protokolls auf dem Server zu ändern. Dies kann sehr interessant sein, um das Debuggen zu aktivieren, wenn ein Problem in einer Staging-Umgebung oder dergleichen auftritt.
quelle
Sie können logeek verwenden. Hiermit können Sie die Sichtbarkeit Ihrer Protokollnachrichten steuern. So machen Sie das:
Sie können auch
logeek.show('nothing')
jede Protokollnachricht vollständig deaktivieren.quelle
Nachdem ich einige Nachforschungen und Entwicklungen für dieses Problem angestellt hatte, stieß ich auf diese Lösung, die Warnungen / Fehler / Protokolle nach Ihrer Wahl verbirgt.
Fügen Sie diesen Code vor dem JQuery-Plugin hinzu (z. B. /../jquery.min.js), auch wenn dies JavaScript-Code ist, für den kein JQuery erforderlich ist. Weil einige Warnungen in JQuery selbst sind.
Vielen Dank!!
quelle
Ich habe eine ES2015- Lösung geschrieben (nur mit Webpack verwenden ).
Beschreibung:
logger.disable()
- Deaktivieren Sie alle Konsolenmeldungenlogger.enable()
- Aktivieren Sie alle Konsolenmeldungenlogger.log('message1', 'message2')
- funktioniert genau wie console.log.logger.warn('message1', 'message2')
- funktioniert genau wie console.warn.logger.error('message1', 'message2')
- funktioniert genau wie console.error. Viel Spaß beim Codieren.quelle