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.
