Gibt es eine Möglichkeit, alle console.log
Anweisungen in meinem JavaScript-Code zu Testzwecken?
Antworten
Zu viele Anzeigen?Sie könnten Javascript AOP verwenden (z.B. jquery-aop ), 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önnten sogar einen Ajax-Aufruf (hin und wieder), so dass Sie das Protokoll aktivieren / deaktivieren Verhalten auf dem Server, die sehr interessant sein kann, um Debugging zu ermöglichen, wenn ein Problem in einer Staging-Umgebung oder so konfrontiert zu tun.
console.log('pre');
/* pre content */
// define a new console
let preconsole = Object.assign({}, window.console);
let aftconsole = Object.assign({}, window.console, {
log: function(text){
preconsole.log(text);
preconsole.log('log');
}
});
console = aftconsole;
/* content */
console.log('content');
/* end of content */
console = preconsole;
console.log('aft');
Wenn Sie React verwenden, können Sie Hooks verwenden, um es zu verwalten, so dass es auf den Bereich Ihrer Komponente beschränkt ist
import { useEffect, useRef } from "react";
type LoggingReplacements = {
debug?: typeof console["debug"];
error?: typeof console["error"];
info?: typeof console["info"];
log?: typeof console["log"];
warn?: typeof console["warn"];
};
/**
* This replaces console.XXX loggers with custom implementations. It will restore console log on unmount of the component.
* @param replacements a map of replacement loggers. They're all optional and only the functions defined will be replaced.
*/
export function useReplaceLogging({
debug,
error,
info,
log,
warn,
}: LoggingReplacements): void {
const originalConsoleDebug = useRef(console.debug);
const originalConsoleError = useRef(console.error);
const originalConsoleInfo = useRef(console.info);
const originalConsoleLog = useRef(console.log);
const originalConsoleWarn = useRef(console.warn);
if (debug) {
console.debug = debug;
}
if (error) {
console.error = error;
}
if (info) {
console.info = info;
}
if (log) {
console.log = log;
}
if (warn) {
console.warn = warn;
}
useEffect(() => {
return function restoreConsoleLog() {
console.debug = originalConsoleDebug.current;
console.error = originalConsoleError.current;
console.info = originalConsoleInfo.current;
console.log = originalConsoleLog.current;
console.warn = originalConsoleWarn.current;
};
}, []);
}
Code mit Tests unter https://github.com/trajano/react-hooks/tree/master/src/useReplaceLogging
Ich habe diesen Thread gefunden, nachdem ich es selbst herausgefunden hatte. Hier ist meine Lösung:
const testArray = {
a: 1,
b: 2
};
const verbose = true; //change this to false to turn off all comments
const consoleLog = (...message) => {
return verbose ? console.log(...message) : null;
};
console.log("from console.log", testArray);
consoleLog("from consoleLog", testArray);
// use consoleLog() for the comments you want to be able to toggle.
Sie können verwenden logeek Sie ermöglicht es Ihnen, die Sichtbarkeit Ihrer Protokollnachrichten zu kontrollieren. So machen Sie das:
<script src="bower_components/dist/logeek.js"></script>
logeek.show('security');
logeek('some message').at('copy'); //this won't be logged
logeek('other message').at('secturity'); //this would be logged
Sie können auch logeek.show('nothing')
um alle Protokollmeldungen vollständig zu deaktivieren.
- See previous answers
- Weitere Antworten anzeigen