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?

2voto

agm-dev Punkte 19

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);

2voto

7ynk3r Punkte 890

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

2voto

kikeenrique Punkte 1927

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

1voto

Gabriel Rohden Punkte 1167

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)

1voto

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.

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