Gibt es eine Möglichkeit, alle console.log
Anweisungen in meinem JavaScript-Code zu Testzwecken?
Antworten
Zu viele Anzeigen?Diese sollte alle Methoden von window.console außer Kraft setzen. Sie können ihn ganz oben in Ihre Skripte einfügen, und wenn Sie ein PHP-Framework verwenden, können Sie diesen Code nur ausgeben, wenn Ihre Anwendungsumgebung produktiv ist oder wenn eine Art Debug-Flag deaktiviert ist. Dann hätten Sie alle Protokolle in Ihrem Code, der in Entwicklungsumgebungen oder im Debug-Modus funktioniert.
window.console = (function(originalConsole){
var api = {};
var props = Object.keys(originalConsole);
for (var i=0; i<props.length; i++) {
api[props[i]] = function(){};
}
return api;
})(window.console);
Eine Vereinfachung der https://stackoverflow.com/a/46189791/871166
switch (process.env.LOG_LEVEL) {
case 'ERROR':
console.warn = function() {};
case 'WARN':
console.info = function() {};
case 'INFO':
console.log = function() {};
case 'LOG':
console.debug = function() {};
console.dir = function() {};
}
Ich habe ein etwas fortgeschritteneres Stück Code in dieser URL gefunden JavaScript-Tipp: Bust und Deaktivieren von console.log :
var DEBUG_MODE = true; // Set this value to false for production
if(typeof(console) === 'undefined') {
console = {}
}
if(!DEBUG_MODE || typeof(console.log) === 'undefined') {
// FYI: Firebug might get cranky...
console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
}
Ich habe dies geschrieben:
//Make a copy of the old console.
var oldConsole = Object.assign({}, console);
//This function redefine the caller with the original one. (well, at least i expect this to work in chrome, not tested in others)
function setEnabled(bool) {
if (bool) {
//Rewrites the disable function with the original one.
console[this.name] = oldConsole[this.name];
//Make sure the setEnable will be callable from original one.
console[this.name].setEnabled = setEnabled;
} else {
//Rewrites the original.
var fn = function () {/*function disabled, to enable call console.fn.setEnabled(true)*/};
//Defines the name, to remember.
Object.defineProperty(fn, "name", {value: this.name});
//replace the original with the empty one.
console[this.name] = fn;
//set the enable function
console[this.name].setEnabled = setEnabled
}
}
Leider funktioniert es nicht im Modus "Strict".
Also mit console.fn.setEnabled = setEnabled
そして console.fn.setEnabled(false)
donde fn
könnte fast jede Konsolenfunktion sein. Für Ihren Fall wäre das:
console.log.setEnabled = setEnabled;
console.log.setEnabled(false);
Das habe ich auch geschrieben:
var FLAGS = {};
FLAGS.DEBUG = true;
FLAGS.INFO = false;
FLAGS.LOG = false;
//Adding dir, table, or other would put the setEnabled on the respective console functions.
function makeThemSwitchable(opt) {
var keysArr = Object.keys(opt);
//its better use this type of for.
for (var x = 0; x < keysArr.length; x++) {
var key = keysArr[x];
var lowerKey = key.toLowerCase();
//Only if the key exists
if (console[lowerKey]) {
//define the function
console[lowerKey].setEnabled = setEnabled;
//Make it enabled/disabled by key.
console[lowerKey].setEnabled(opt[key]);
}
}
}
//Put the set enabled function on the original console using the defined flags and set them.
makeThemSwitchable(FLAGS);
dann müssen Sie nur noch die FLAGS
den Standardwert (vor Ausführung des obigen Codes), wie FLAGS.LOG = false
und die Protokollfunktion wäre standardmäßig deaktiviert, und Sie könnten sie dennoch aktivieren, indem Sie console.log.setEnabled(true)
Um den anderen Antworten noch etwas hinzuzufügen: Ich persönlich wollte nur bestimmte Teile meines Codes abschalten (ES6-Module, aber auch einfache separate Skripte sollten funktionieren).
// old console to restore functionality
const consoleHolder = window.console;
// arbitrary strings, for which the console stays on (files which you aim to debug)
const debuggedHandlers = ["someScript", "anotherScript"];
// get console methods and create a dummy with all of them empty
const consoleMethodKeys = Object.getOwnPropertyNames(window.console).filter(item => typeof window.console[item] === 'function');
const consoleDummy = {};
consoleMethodKeys.forEach(method => consoleDummy[method] = () => {});
export function enableConsoleRedirect(handler) {
if (!debuggedHandlers.includes(handler)) {
window.console = consoleDummy;
}
}
export function disableConsoleRedirect() {
window.console = consoleHolder;
}
Dann importieren Sie dieses Modul einfach in eine beliebige Datei, in der Sie den Debug-Modus umschalten möchten, und rufen die enable-Funktion am Anfang der Datei und die disable-Funktion am Ende der Datei auf.
Wenn Sie es in einfachen Skripten verwenden wollen, sollten Sie den oberen Teil in anonyme Funktionen verpacken und/oder ihn ein wenig umorganisieren, um die Verschmutzung des Namensraums zu minimieren.
Zusätzlich können Sie nur true/false anstelle des String-Handlers verwenden und den Debug-Modus in der Datei, mit der Sie gerade arbeiten, umschalten.