javascript - Overstyr console.log(); for produksjon


Jeg er ganske ny i Javascript-utvikling, så dette kan være et virkelig nybegynnerspørsmål.

Jeg har en sencha-touch-applikasjon full av console.log(); for feilsøkingsformål.

Jeg har fått chirpy til å gjøre all min kombinasjon under byggetiden. Den lager en app.debug.js for feilsøking, samt en app.min.js for produksjon

Nå kunne jeg gått gjennom alle kodefilene mine for å se etter console.log(); og slette det manuelt når jeg er klar til produksjon, men jeg lurer på om det finnes en måte å overstyre metoden på.

I utgangspunktet, hver gang console.log();-metoden blir kalt, GJØR INGENTING.

På den måten kan jeg legge override-kodefilen i produksjonskonfigurasjonen min, og IKKE i debug-konfigurasjonen min.

Er dette mulig?

Svar #1

Sett dette øverst i filen:

var console = {};
console.log = function(){};

For noen nettlesere og minifiseringsverktøy, kan det hende du må bruke dette på vindusobjektet.

window.console = console;

Svar #2

Eller hvis du bare vil omdefinere konsollens oppførsel (for eksempel for å legge til logger), kan du gjøre noe slik:

// define a new console
var console=(function(oldCons){
    return {
        log: function(text){
            oldCons.log(text);
            // Your code
        },
        info: function (text) {
            oldCons.info(text);
            // Your code
        },
        warn: function (text) {
            oldCons.warn(text);
            // Your code
        },
        error: function (text) {
            oldCons.error(text);
            // Your code
        }
    };
}(window.console));

//Then redefine the old console
window.console = console;

Svar #3

Det ville vært veldig nyttig å kunne slå logging på og av i produksjonsbygget. Koden nedenfor slår av loggeren som standard.

Når jeg trenger å se logger, skriver jeg bare debug(true) i konsollen.

var consoleHolder = console;
function debug(bool){
    if(!bool){
        consoleHolder = console;
        console = {};
        Object.keys(consoleHolder).forEach(function(key){
            console[key] = function(){};
        })
    }else{
        console = consoleHolder;
    }
}
debug(false);

For å være grundig, overstyrer dette ALLE konsollmetodene, ikke bare console.log.

Svar #4

Jeg bruker noe lignende det Posit Labs gjør. Lagre konsollen i en closure, så har du alt i en bærbar funksjon.

var GlobalDebug = (function () {
    var savedConsole = console;
    return function(debugOn,suppressAll){
        var suppress = suppressAll || false;
        if (debugOn === false) {
            console = {};
            console.log = function () { };
            if(suppress) {
                console.info = function () { };
                console.warn = function () { };
                console.error = function () { };
            } else {
                console.info = savedConsole.info;
                console.warn = savedConsole.warn;
                console.error = savedConsole.error;              
            }
        } else {
            console = savedConsole;
        }
    }
})();

Bare gjør globalDebug(false) for å slå av loggmeldinger eller globalDebug(false,true) for å fjerne alle konsollmeldinger.

Relaterte artikler