[javascript] 내 코드에서 모든 console.log 문을 빠르고 편리하게 비활성화하는 방법은 무엇입니까?

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


답변

DEBUGconsole.log 함수를 대체 하려면 플래그 를 변경하십시오 . 이것은 트릭을해야합니다.

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}