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


256

console.log테스트 목적으로 JavaScript 코드에서 모든 명령문 을 끌 수있는 방법이 있습니까?


11
"모두 바꾸기"를 지원하는 텍스트 편집기를 사용하고 "console.log"를 "//console.log"로
바꾸십시오

5
@helloandre - 당신이 로그를 사용하는 경우, 정보는, 디버그 및 오류 경고하지만 그건 좀 무심를 얻을 수
UpTheCreek

브라우저의 디버깅 도구가 활성화되어 있지 않으면 브라우저 구현이 자동으로 콘솔 문을 무시하는 지점에 도달 할 수 있기를 바랍니다.
faintsignal

2
아래 답변은 훌륭하지만 휠을 다시 발명 할 필요는 없습니다. picolog보십시오 . (NodeJS) 콘솔과 호환되는 API가 있으므로 드롭 인 대체품으로 사용할 수 있습니다. 즉시 로깅 수준을 지원하고 브라우저, NodeJS 및 Nashorn에서 작동하며 쿼리 문자열 (브라우저) 또는 환경 변수 PICOLOG_LEVEL(노드) 에서 쉽게 구성 할 수 있으며 매우 작습니다. 900 바이트 이하로 축소되고 압축됩니다. 면책 조항 : 나는 저자입니다.
Stijn de Witt

모두 무시하는 간단한 방법이 있습니다 console 기능 . stapp.space/disable-javascript-console-on-production
Piotr Stapp

답변:


426

스크립트에서 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에 대한 호출을 추가하십시오.


작동하지 않는 것에 대해 자세히 알려주세요. 위의 줄에 오류가 있습니까? 그렇다면 오류 메시지는 무엇입니까?
SolutionYogi

1
IE8에서 나를 위해 일합니다. ;-)
Eugene Lazutkin

이 코드는 console.log 기능을 덮어 쓰고 복원합니다. IE7이 console.log 메소드를 지원하면 작동합니다.
SolutionYogi

3
console.log = function () {}이 Firefox에서 작동하지 않는 것 같습니다. 여전히 '콘솔이 정의되지 않았습니다'오류가 발생합니다.
DA.

2
정말 끔찍한 해결책입니다. 수정 console.log... 왜 부울과 로깅을위한 조건부 함수가 있습니까?
치매

76

다음은 더 철저합니다.

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

이것은 약간 완벽하게 조정했지만 환경을 확인했지만 (생산에서만 비활성화하고 싶습니다)
Muganwas

27

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

1
고맙지 만, 이것은 모든 console.log 문을 debug.log로 다시 작성해야 함을 의미합니다.
Zack Burt

처음부터 시작하는 경우 물론 이것이 올바른 방법입니다.
OpenSource

3
편집기에서 찾기 / 바꾸기 기능이 좋은 경우에도 올바른 방법입니다.
BaroqueBobcat

2
적어도 jQuery를 사용하는 경우 자신의 래퍼 btw를 작성할 필요가 없습니다. jQuery 디버깅 플러그인은 훌륭하게 작동합니다. 보너스로 브라우저없이 console.log를 에뮬레이션합니다. trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug
Nelson

물론 유일한 사소한 문제는 플러그인을 설치해야한다는 것입니다. :) 알아두면 좋겠다-고마워!
Cide

17

당신은해야하지!

내장 함수를 겹쳐 쓰는 것은 좋은 습관이 아닙니다. 또한 모든 출력을 억제한다는 보장은 없으며, 사용하는 다른 라이브러리가 변경 사항을 되돌릴 수 있으며 콘솔에 쓸 수있는 다른 기능이 있습니다. .dir(), .warning(), .error(), .debug(), .assert()

일부 제안했듯이 DEBUG_MODE변수를 정의하고 조건부로 로그 할 수 있습니다. 코드의 복잡성과 특성에 따라 콘솔 객체를 감싸고이 기능이 내장 된 자신 만의 로거 객체 / 함수를 작성하는 것이 좋습니다. 그것은 계측을 다루기에 적합한 장소 일 것 입니다.

즉, '테스트'목적으로 콘솔에 인쇄하는 대신 테스트 를 작성할 수 있습니다 . 테스트를 수행하지 않고 해당 console.log()행이 코드를 작성하는 데 도움이 되었다면 간단히 삭제하십시오 .


7
"other libraries you use may revert your changes": console.log맨 처음에 비활성화 하면 이전 기능으로 되돌릴 수 없습니다. 글쎄, 그들은 console.log소스 코드를 다시 작성할 수 있지만 왜? "it may be a good idea to write your own logger object/function that wraps around the console object": 나는 이것을 과거에 해왔으며 나쁜 생각입니다. 콘솔 출력의 추적은 랩퍼를 참조하고이를 호출하는 행이 아니라 디버깅을 더 어렵게합니다.
Marco Sulla

3
@LucasMalor는 "처음부터"코드가 해당 인프라에 결합되어 재사용 성이 제한됨을 의미합니다. 그러나 일반화하기는 어렵다. 게임, 일부 DOM 애니메이션은 복잡한 SPA 내부의 도메인 로직과 동일하지 않으며, 나중에 "콘솔"이라는 것을 알면 브라우저를 인식해서는 안됩니다. 이 경우 console.log('Look ma, it reaches this point');코드에서 일부를 해킹하는 대신 적절한 테스트 전략이 있어야합니다. 다른 모든 것이 실패하면 실제로 debugger;지침을 사용할 수 있습니다 .
istepaniuk

"the code is coupled to that infrastructure": 아마도 코드이지만 패턴은 아닙니다. 로깅 기능이 비활성화 된 페이지에 대한 공통 기본 템플릿을 만들면 어디에서나 적용 할 수있는 논리입니다. "the later shouldn't be browser-aware": 글쎄, 그래서 당신은 JS를 사용해서는 안된다 : P
Marco Sulla

3
@MarcoSulla 더 깨끗한 코드를 작성하고 있다고 생각합니다. ".... 당신은 JS를 사용해서는 안된다"고 말하는 것은 약간 무겁습니다. 이상적으로 프로그래머는 환경에 관계없이 가능한 한 모듈화해야합니다. 브라우저에 신경 쓰지 않는다면 더 많은 장소에 배포 할 수 있습니다. 물건을 깰 염려가 덜합니다. 그래서 IMHO 네, 그는 실제로 옳습니다. "공통 기본 템플리트를 작성하는 경우 ..."라고 말하여 시작하여 그 자체로 종속성이 발생 함을 명심하십시오. 이런 종류의 사고는 소프트웨어를 복잡하게 만듭니다. 생각할 거리.
dudewad

1
Adobe SiteCatalyics는 콘솔에서 많은 정크를 발생시키고 경우에 따라 디버깅을 번거롭게 만듭니다. 나는 나를 위해 매우 유용 할 것 타사 전화를 실행할 때 일시적으로 해제 CONSOLE.LOG 할 수있는 그래서
스핀의

16

나는 이것이 오래된 게시물이라는 것을 알고 있지만 여전히 Google 결과의 최상위에 팝업되므로 최신 Chrome, FF 및 IE에서 작동하는보다 우아한 비 jQuery 솔루션이 있습니다.

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);

12

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

2
IE 특정 로깅 비활성화에 대해서는 Chris S. 답변을 참조하십시오.
GuruM

11

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

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

2
한 걸음 더 나아가 로거 함수 / 클래스로 래핑합니다. 이와 같은 것 :function myLog(msg) { if (debug) { console.log(msg); } }
sleblanc

Angular를 사용하는 경우 application.js 파일에서 전역 구성으로 사용하고 전역 속성으로 사용하여 로그를 켜거나 끌 수 있습니다. IE에서 개발자 툴바가 열려 있으면 콘솔이 정의되지 않습니다.
스와니 디

10

아무도 대답하지 않는 모든 대답에 놀랐습니다.

  • jquery 없음
  • 글로벌 네임 스페이스를 오염시키지 않는 익명 함수
  • window.console이 정의되지 않은 경우 처리
  • 콘솔의 .log 기능을 수정하십시오.

나는 이것을 갈 것이다.

(function () {

    var debug = false

    if (debug === false) {
        if ( typeof(window.console) === 'undefined') { window.console = {}; }
        window.console.log = function () {};
    }
})()

9

이 문제를 검색하고 내 코르도바 앱 내에서 시도한 후 모든 개발자에게 Windows Phone의 덮어 쓰기를 경고하고 싶습니다.

    console.log

시작시 앱이 중단되기 때문입니다.

운이 좋으면 로컬을 개발하는 경우 충돌하지 않지만 상점에 제출하면 앱이 중단됩니다.

덮어 쓰기

    window.console.log 

필요한 경우.

이것은 내 응용 프로그램에서 작동합니다.

   try {
        if (typeof(window.console) != "undefined") {
            window.console = {};
            window.console.log = function () {
            };
            window.console.info = function () {
            };
            window.console.warn = function () {
            };
            window.console.error = function () {
            };
        }

        if (typeof(alert) !== "undefined") {
            alert = function ()
            {

            }
        }

    } catch (ex) {

    }

"경고"에 감사드립니다. 그러나 나는 Cordova 기반 앱을 Google Play 스토어에 출시하고 전화 장치로 테스트했으며 모두 괜찮 았습니다. 경고가 "Windows 기반"앱 스토어로 제한되었다고 가정 할 수 있습니까? ... 그러나 폭파가 발생할 경우를 대비해 try-catch 브래킷 안에 op를 배치하는 것이 좋습니다. 따라서 엄지 손가락 업.
Panini Luncher

8

IE7을 사용하는 경우 콘솔이 정의되지 않습니다. 따라서 IE 친화적 인 버전은 다음과 같습니다.

if (typeof console == "undefined" || typeof console.log == "undefined") 
{
   var console = { log: function() {} }; 
}

5

이것은 SolutionYogiChris S 의 답변이 혼합 된 형식으로 console.log 줄 번호와 파일 이름을 유지합니다. jsFiddle 예제 .

// Avoid global functions via a self calling anonymous one (uses jQuery)
(function(MYAPP, $, undefined) {
    // Prevent errors in browsers without console.log
    if (!window.console) window.console = {};
    if (!window.console.log) window.console.log = function(){};

    //Private var
    var console_log = console.log;  

    //Public methods
    MYAPP.enableLog = function enableLogger() { console.log = console_log; };   
    MYAPP.disableLog = function disableLogger() { console.log = function() {}; };

}(window.MYAPP = window.MYAPP || {}, jQuery));


// Example Usage:
$(function() {    
    MYAPP.disableLog();    
    console.log('this should not show');

    MYAPP.enableLog();
    console.log('This will show');
});


3

나는 그가 문제를 해결하기 위해 다음을 사용했습니다.

var debug = 1;
var logger = function(a,b){ if ( debug == 1 ) console.log(a, b || "");};

디버깅을 활성화하려면 debug를 1로 설정하십시오. 그런 다음 디버그 텍스트를 출력 할 때 로거 기능을 사용하십시오. 또한 두 개의 매개 변수를 허용하도록 설정되어 있습니다.

그래서 대신

console.log("my","log");

사용하다

logger("my","log");

3

이전에 윈스턴 로거를 사용했습니다 .

요즘에는 경험에서보다 간단한 코드를 사용하고 있습니다.

  1. cmd / 명령 행에서 환경 변수를 설정하십시오 (Windows의 경우).

    cmd
    setx LOG_LEVEL info

또는 원하는 경우 코드에 변수를 가질 수 있지만 위의 것이 좋습니다.

  1. cmd / 명령 행 또는 Netbeans와 같은 IDE / 편집기를 다시 시작하십시오.

  2. 아래 코드와 같이하십시오 :

    console.debug = console.log;   // define debug function
    console.silly = console.log;   // define silly function
    
    switch (process.env.LOG_LEVEL) {
        case 'debug':
        case 'silly':
            // print everything
            break;
    
        case 'dir':
        case 'log':
            console.debug = function () {};
            console.silly = function () {};
            break;
    
        case 'info':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            break;
    
        case 'trace':   // similar to error, both may print stack trace/ frames
        case 'warn':    // since warn() function is an alias for error()
        case 'error':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            console.info = function () {};
            break;
    }
  3. 다음과 같이 모든 콘솔을 사용하십시오. *

    console.error(' this is a error message '); // will print
    console.warn(' this is a warn message '); // will print
    console.trace(' this is a trace message '); // will print
    console.info(' this is a info message '); // will print, LOG_LEVEL is set to this
    
    console.log(' this is a log message '); // will NOT print
    console.dir(' this is a dir message '); // will NOT print
    console.silly(' this is a silly message '); // will NOT print
    console.debug(' this is a debug message '); // will NOT print

이제 1 지점에서 지정한 LOG_LEVEL 설정 (예 : setx LOG_LEVEL log명령 줄 다시 시작)을 기반으로 위의 일부가 인쇄되고 나머지는 인쇄되지 않습니다

도움이 되었기를 바랍니다.


2

경고 : 뻔뻔한 플러그!

내 JsTrace 객체와 같은 것을 사용하여 모듈 수준의 "전환"기능을 갖춘 모듈 식 추적 기능을 사용하여 당시에 보려는 내용 만 켤 수 있습니다.

http://jstrace.codeplex.com

(또한 관심있는 사람들을 위해 NuGet 패키지가 있습니다)

모든 레벨은 "오류"로 기본 설정되어 있지만 "끄기"상태 일 수 있습니다. 그래도 왜 오류를보고 싶지 않을지 모르겠습니다.

다음과 같이 변경할 수 있습니다.

Trace.traceLevel('ModuleName1', Trace.Levels.log);
Trace.traceLevel('ModuleName2', Trace.Levels.info);

더 많은 문서를 보려면 설명서를 확인 하십시오.


2

이 URL JavaScript Tip : Bust and Disable console.log 에서 조금 더 고급 코드를 발견했습니다 .

var DEBUG_MODE = true; // Set this value to false for production

if(typeof(console) === 'undefined') {
   console = {}
}

if(!DEBUG_MODE || typeof(console.log) === 'undefined') {
   // FYI: Firebug might get cranky...
   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() {};
}

2

이 사용 사례를위한 라이브러리를 개발했습니다 : https://github.com/sunnykgupta/jsLogger

풍모:

  1. console.log를 안전하게 재정의합니다.
  2. 콘솔을 사용할 수없는 경우주의를 기울입니다 (예, 해당 요소도 고려해야합니다).
  3. 나중에 검색 할 수 있도록 모든 로그를 저장합니다 (억제 되더라도).
  4. 핸들 주요 콘솔 기능이 좋아 log, warn, error, info.

수정 가능하며 새로운 제안이 올 때마다 업데이트됩니다.


2

이것은 window.console의 모든 메소드를 대체해야합니다. 스크립트 섹션의 맨 위에 놓을 수 있으며, PHP 프레임 워크를 사용하는 경우 앱 환경이 제작되거나 디버그 플래그가 비활성화 된 경우에만이 코드를 인쇄 할 수 있습니다. 그런 다음 개발 환경 또는 디버그 모드에서 작동하는 코드의 모든 로그를 갖게됩니다.

window.console = (function(originalConsole){
    var api = {};
    var props = Object.keys(originalConsole);
    for (var i=0; i<props.length; i++) {
        api[props[i]] = function(){};
    }
    return api;
})(window.console);

1

나는 이것을 썼다 :

//Make a copy of the old console.
var oldConsole = Object.assign({}, console);

//This function redefine the caller with the original one. (well, at least i expect this to work in chrome, not tested in others)
function setEnabled(bool) {
    if (bool) {
        //Rewrites the disable function with the original one.
        console[this.name] = oldConsole[this.name];
        //Make sure the setEnable will be callable from original one.
        console[this.name].setEnabled = setEnabled;
    } else {
        //Rewrites the original.
        var fn = function () {/*function disabled, to enable call console.fn.setEnabled(true)*/};
        //Defines the name, to remember.
        Object.defineProperty(fn, "name", {value: this.name});
        //replace the original with the empty one.
        console[this.name] = fn;
        //set the enable function
        console[this.name].setEnabled = setEnabled

    }
}

불행히도 엄격 모드 사용에서는 작동하지 않습니다.

그래서 사용 console.fn.setEnabled = setEnabled하고 console.fn.setEnabled(false)어디 fn거의 모든 콘솔 기능이 될 수 있습니다. 귀하의 경우는 다음과 같습니다.

console.log.setEnabled = setEnabled;
console.log.setEnabled(false);

나도 이것을 썼다 :

var FLAGS = {};
    FLAGS.DEBUG = true;
    FLAGS.INFO = false;
    FLAGS.LOG = false;
    //Adding dir, table, or other would put the setEnabled on the respective console functions.

function makeThemSwitchable(opt) {
    var keysArr = Object.keys(opt);
    //its better use this type of for.
    for (var x = 0; x < keysArr.length; x++) {
        var key = keysArr[x];
        var lowerKey = key.toLowerCase();
        //Only if the key exists
        if (console[lowerKey]) {
            //define the function
            console[lowerKey].setEnabled = setEnabled;
            //Make it enabled/disabled by key.
            console[lowerKey].setEnabled(opt[key]);
        }
    }
}
//Put the set enabled function on the original console using the defined flags and set them.
makeThemSwitchable(FLAGS);

따라서 FLAGS위의 코드를 실행하기 전에 기본값을 입력 FLAGS.LOG = false하면됩니다. 로그 기능은 기본적으로 비활성화되어 있으며 여전히 호출을 활성화 할 수 있습니다console.log.setEnabled(true)


프로덕션 환경에서 console.log를 즉시 활성화하는 데 사용할 수 있다고 생각하십니까? Chrome 콘솔을 열고 실행 console.log.setEnabled(true)하고 로그보기를 시작합니다
Rodrigo Assis

1
@RodrigoAssis 예, 작동합니다. 발신자 회선을 잃지 않고 어디서나 사용할 수 있도록하기 위해 이것을 만들었지 만 최선의 방법은 아닙니다. : 로그에 대한 가장 좋은 방법은 같은 단락 회로 방식을 사용하는 것입니다 var debug = false; debug && console.log(1/3)그것은이 활성화되지 않은 경우 (이 경우 로그 내용을 평가할 필요가 없기 때문에 1/3평가되지 않습니다), 발신자 라인을 잃지 않고 사용할 수 있습니다 그것도 쉽게 (const로 vars하지 않으면).
Gabriel De Oliveira Rohden

1

모든 console.*기능 을 비활성화 / 재정의하는 포괄적 인 솔루션 이 여기 있습니다 .

물론 필요한 상황을 확인한 후 포함 시키십시오. 예를 들어, 프로덕션 릴리스를 포함하여 다른 중요한 구성 요소를 폭격하지 않습니다.

여기에 인용 :

"use strict";
(() => {
  var console = (window.console = window.console || {});
  [
    "assert", "clear", "count", "debug", "dir", "dirxml",
    "error", "exception", "group", "groupCollapsed", "groupEnd",
    "info", "log", "markTimeline", "profile", "profileEnd", "table",
    "time", "timeEnd", "timeStamp", "trace", "warn"
  ].forEach(method => {
    console[method] = () => {};
  });
  console.log("This message shouldn't be visible in console log");
})();


1

꿀꺽 꿀꺽 사용하는 경우 다음 플러그인을 사용할 수 있습니다 .

다음 명령으로이 플러그인을 설치하십시오.

npm install gulp-remove-logging

다음으로이 줄을 gulpfile에 추가하십시오 :

var gulp_remove_logging = require("gulp-remove-logging");

마지막으로 gulpfile에 구성 설정 (아래 참조)을 추가하십시오.

작업 구성

gulp.task("remove_logging", function() {
     return gulp.src("src/javascripts/**/*.js")
    .pipe(
      gulp_remove_logging()
    )
    .pipe(
      gulp.dest(
        "build/javascripts/"
      )
    ); });

1

https://stackoverflow.com/a/46189791/871166 의 단순화

switch (process.env.LOG_LEVEL) {
  case 'ERROR':
    console.warn = function() {};
  case 'WARN':
    console.info = function() {};
  case 'INFO':
    console.log = function() {};
  case 'LOG':
    console.debug = function() {};
    console.dir = function() {};
}

0

자바 스크립트 AOP를 사용할 수 있습니다 (예 : jquery-aop )를 사용하여 console.debug / log (around)에 대한 모든 호출을 가로 채고 일부 전역 변수가 false로 설정된 경우 실제 호출을 진행할 수 없습니다.

서버에서 로그 사용 / 사용 안함 동작을 변경할 수있는 아약스 호출 (지금도 가능)을 수행 할 수도 있습니다. 이는 스테이징 환경 등에서 문제가 발생할 때 디버깅을 사용하는 것이 매우 흥미로울 수 있습니다.


나는 그런 해결책을 구현하지 않았지만 그것을 보지 못했습니다. 지금까지는 이론적입니다.
Stijn Geukens

0

logeek 를 사용할 수 있으며 , 로그 메시지 가시성을 제어 할 수 있습니다. 그 방법은 다음과 같습니다.

<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

logeek.show('nothing')모든 로그 메시지를 완전히 비활성화 할 수도 있습니다 .


0

이 문제에 대한 연구 개발을 마친 후에는이 솔루션을 발견하여 선택에 따라 경고 / 오류 / 로그를 숨길 수 있습니다.

    (function () {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function () {        
        console.warn = function () { };
        window['console']['warn'] = function () { };
        this.addEventListener('load', function () {                        
            console.warn('Something bad happened.');
            window['console']['warn'] = function () { };
        });        
    };
})();

JQuery가 필요하지 않은 JavaScript 코드 임에도 불구하고 JQuery 플러그인 (예 : /../jquery.min.js) 앞에이 코드를 추가하십시오. 일부 경고는 JQuery 자체에 있기 때문입니다.

감사!!


0

ES2015 솔루션을 작성했습니다 ( Webpack 에만 사용 ).

class logger {
  static isEnabled = true;

  static enable () {
    if(this.constructor.isEnabled === true){ return; }

    this.constructor.isEnabled = true;
  }

  static disable () {
    if(this.constructor.isEnabled === false){ return; }

    this.constructor.isEnabled = false;
  }

  static log () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['log'].apply(this, copy);
  }

  static warn () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['warn'].apply(this, copy);
  }

  static error () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['error'].apply(this, copy);
  }
}

기술:

  1. logger.enable 및 logger.disable과 함께 console. [ 'log', 'warn', 'error'] 메소드와 logger 클래스를 사용할 수 있습니다.
  2. 메시지를 표시, 활성화 또는 비활성화하기 위해 로거 클래스를 사용하면 코드를 훨씬 깨끗하고 유지 관리 할 수 ​​있습니다.
  3. 아래 코드는 로거 클래스를 사용하는 방법을 보여줍니다.
    • logger.disable() -모든 콘솔 메시지를 비활성화
    • logger.enable() -모든 콘솔 메시지를 활성화
    • logger.log('message1', 'message2') -console.log와 동일하게 작동합니다.
    • logger.warn('message1', 'message2') -console.warn과 동일하게 작동합니다.
    • logger.error('message1', 'message2')-console.error와 똑같이 작동합니다. 행복한 코딩 ..
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.