console.log
테스트 목적으로 JavaScript 코드에서 모든 명령문 을 끌 수있는 방법이 있습니까?
답변
스크립트에서 console.log 함수를 재정의하십시오.
console.log = function() {}
이제 콘솔에 더 이상 메시지가 없습니다.
편집하다:
Cide의 아이디어를 확장합니다. 코드에서 로그 온 / 오프를 토글하는 데 사용할 수있는 사용자 정의 로거입니다.
내 Firefox 콘솔에서 :
var logger = function()
{
var oldConsoleLog = null;
var pub = {};
pub.enableLogger = function enableLogger()
{
if(oldConsoleLog == null)
return;
window['console']['log'] = oldConsoleLog;
};
pub.disableLogger = function disableLogger()
{
oldConsoleLog = console.log;
window['console']['log'] = function() {};
};
return pub;
}();
$(document).ready(
function()
{
console.log('hello');
logger.disableLogger();
console.log('hi', 'hiya');
console.log('this wont show up in console');
logger.enableLogger();
console.log('This will show up!');
}
);
위의 ‘로거’를 사용하는 방법은 무엇입니까? 준비가되면 콘솔 메시지가 기록되지 않도록 logger.disableLogger를 호출하십시오. 콘솔에 메시지를 로그하려는 메소드 내에 logger.enableLogger 및 logger.disableLogger에 대한 호출을 추가하십시오.
답변
다음은 더 철저합니다.
var DEBUG = false;
if(!DEBUG){
if(!window.console) window.console = {};
var methods = ["log", "debug", "warn", "info"];
for(var i=0;i<methods.length;i++){
console[methods[i]] = function(){};
}
}
콘솔에서 일반적인 메소드가있는 경우이를 제로로 만들며, 오류없이 사실상 성능 오버 헤드없이 호출 할 수 있습니다. 콘솔이없는 IE6와 같은 브라우저의 경우, 오류를 방지하기 위해 더미 메소드가 작성됩니다. 물론 Firebug에는 추적, 프로파일, 시간 등과 같은 더 많은 기능이 있습니다. 코드에서 사용하면 목록에 추가 할 수 있습니다.
디버거에 이러한 특수 메서드가 있는지 (예 : IE) 있는지 확인하고 지원하지 않는 메서드를 제거 할 수도 있습니다.
if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
for(var i=0;i<methods.length;i++){
console[methods[i]] = function(){};
}
}
답변
documentation 에서 알 수 있듯이 Firebug는 디버그 상태를 토글하는 변수를 제공하지 않습니다. 대신 console.log ()를 조건부로 호출하는 랩퍼로 랩핑하십시오.
DEBUG = true; // set to false to disable debugging
function debug_log() {
if ( DEBUG ) {
console.log.apply(this, arguments);
}
}
기존 통화를 모두 변경하지 않으려면 대신 다음을 사용할 수 있습니다.
DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
if ( DEBUG ) {
old_console_log.apply(this, arguments);
}
}
답변
당신은해야하지!
내장 함수를 겹쳐 쓰는 것은 좋은 습관이 아닙니다. 또한 모든 출력을 억제한다는 보장은 없으며, 사용하는 다른 라이브러리가 변경 사항을 되돌릴 수 있으며 콘솔에 쓸 수있는 다른 기능이 있습니다. .dir()
, .warning()
, .error()
, .debug()
, .assert()
등
일부 제안했듯이 DEBUG_MODE
변수를 정의하고 조건부로 로그 할 수 있습니다. 코드의 복잡성과 특성에 따라 콘솔 객체를 감싸고이 기능이 내장 된 자신 만의 로거 객체 / 함수를 작성하는 것이 좋습니다. 그것은 계측을 다루기에 적합한 장소 일 것 입니다.
즉, ‘테스트’목적으로 콘솔에 인쇄하는 대신 테스트 를 작성할 수 있습니다 . 테스트를 수행하지 않고 해당 console.log()
행이 코드를 작성하는 데 도움이 되었다면 간단히 삭제하십시오 .
답변
나는 이것이 오래된 게시물이라는 것을 알고 있지만 여전히 Google 결과의 최상위에 팝업되므로 최신 Chrome, FF 및 IE에서 작동하는보다 우아한 비 jQuery 솔루션이 있습니다.
(function (original) {
console.enableLogging = function () {
console.log = original;
};
console.disableLogging = function () {
console.log = function () {};
};
})(console.log);
답변
console.log를 사용하지 않도록 설정하는 방법에 대한 질문을 받았지만 이것이 실제로 나올 수도 있습니다. 이렇게하면 콘솔을 명시 적으로 활성화하거나 비활성화 할 필요가 없습니다. 단순히 열거 나 설치하지 않은 사람들에게 성가신 콘솔 오류를 방지합니다.
if(typeof(console) === 'undefined') {
var console = {};
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() {};
}
답변
DEBUG
console.log 함수를 대체 하려면 플래그 를 변경하십시오 . 이것은 트릭을해야합니다.
var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
console.log = function() {}
}