문제

나는 많은 것들이있다 console.log() 내 JavaScript로 호출됩니다.

제작에 배치하기 전에 댓글을 달아야합니까?

나는 그냥 거기에두고 싶기 때문에 더 이상 디버깅을 해야하는 경우 나중에 의견을 다시 설명하는 데 어려움을 겪을 필요가 없습니다. 이것이 나쁜 생각입니까?

도움이 되었습니까?

해결책

JavaScript 오류가 발생하여 오류가 포함 된 JavaScript 블록의 실행을 종료합니다.

그러나 FireBug가 활성화되지 않은 경우 NO-OP 인 더미 기능을 정의 할 수 있습니다.

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

다른 방법을 사용하는 경우 log, 당신은 그것들을 스터브해야합니다.

다른 팁

다른 사람들이 이미 지적했듯이, 그것을 남겨두면 일부 브라우저에서 오류가 발생하지만 일부 스텁을 넣어 이러한 오류를 해결할 수 있습니다.

그러나 나는 그것들을 언급 할뿐만 아니라 그 줄을 완전히 제거 할 것입니다. 그렇지 않으면 더 칙칙한 것 같습니다. 아마도 나는 pedantic 일지 모르지만, "프로덕션"코드에는 댓글이 붙은 형식으로도 "디버그"코드가 포함되어야한다고 생각하지 않습니다. 의견을 남겨두면 해당 의견은 코드가 수행하는 작업 또는 그 뒤에있는 추론 (비활성화 된 코드 블록이 아닌)을 설명해야합니다. (비록 대부분의 의견은 미니 화 과정에 의해 자동으로 제거되어야합니다. 당신은 최소화하고 있습니까?)

또한, 몇 년 동안 JavaScript와 함께 일한 후, 나는 기능으로 돌아와서 "Gee, 나는 그 콘솔을 떠났으면 좋겠다." 일반적으로, 내가 함수 작업을하면서 "완료"되고 나중에 다시 돌아와야 할 때, 나는 다른 문제를 해결하기 위해 돌아온다. 그 새로운 문제가 무엇이든, 이전 작업 라운드의 Console.logs가 도움이 될 수 있다면 처음으로 문제를 발견했을 것입니다. 다시 말해, 내가 무언가로 돌아 오면 이전에 필요한 것과 정확히 동일한 디버그 정보가 필요하지 않을 것입니다.

내 두 센트 그냥 ... 행운을 빕니다!

배포 스크립트가있는 경우 통화를 Console.Log로 제거하고 파일을 미치는 스크립트를 사용하여 스크립트를 사용하십시오.

당신이 그것을하는 동안, 당신은 JSLINT를 통해 JS를 던지고 검사를 위해 위반을 기록하거나 배치를 방지 할 수 있습니다.

이것은 배포를 자동화하려는 이유의 훌륭한 예입니다. 프로세스가 Console.Logs가있는 JS 파일을 게시 할 수있는 경우, 어느 시점에서 ~ 할 것이다 해.

내 지식으로는 더 짧은 방법이 없다. console.log 다음 45 자보다 :

window.console||(console={log:function(){}});

그것은 당신이 그들 모두를 스텁하려는 콘솔 방법에 따라 3 가지 버전 중 첫 번째 버전 중 첫 번째 버전입니다. 모두가 작고 모두 IE6+ 및 최신 브라우저에서 테스트되었습니다.

다른 두 버전은 다른 콘솔 방법을 다루고 있습니다. 하나는 네 가지 기본 사항을 다루고 다른 하나는 FireBug 및 WebKit에 대한 알려진 모든 콘솔 방법을 다룹니다. 다시 말하지만, 가장 작은 파일 크기로 가능합니다.

그 프로젝트는 Github에 있습니다. https://github.com/andyet/consoledummy.js

코드를 더 최소화하는 방법을 생각할 수 있다면 기부금이 환영됩니다.

- 편집- 2012 년 5 월 16 일

이후이 코드를 개선했습니다. 여전히 작지만 콘솔 출력을 켜고 끄는 기능을 추가합니다. https://github.com/henrikjoreteg/andlog

그것은 Changelog 쇼에 등장합니다

적어도 더미를 만들어야합니다 console.log 객체가 존재하지 않으면 코드가 Firebug가 설치되지 않은 사용자의 컴퓨터에 오류가 발생하지 않습니다.

또 다른 가능성은 '디버그 모드'에서만 로깅을 트리거하는 것입니다. 즉, 특정 플래그가 설정된 경우 :

if(_debug) console.log('foo');
_debug && console.log('foo');

그것이 누군가를 도울 수 있기를 바랍니다. 나는 잠시 동안 래퍼를 썼습니다. 허용 된 솔루션보다 약간 더 유연합니다.

분명히 Console.info 등과 같은 다른 방법을 사용하면 효과를 복제 할 수 있습니다. 스테이징 환경을 사용하면 기본 C.Debug를 프로덕션을 위해 False로 변경하면 다른 코드 / 테이크 라인 등을 변경할 필요가 없습니다.

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");

이것은 나를 위해 효과가있는 것 같습니다 ...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}

나는 다른 관점을 공유 할 것이라고 생각했다. PCI 애플리케이션에서 이러한 유형의 출력을 외부 세계에 보이게하면 준수하지 않습니다.

콘솔 스텁이 좋은 접근법이라는 데 동의합니다. 상당히 복잡한 콘솔 플러그인을 포함하여 다양한 콘솔 플러그인, 코드 스 니펫을 시도했습니다. 그들은 모두 하나 이상의 브라우저에서 약간의 문제가 있었기 때문에 아래와 같은 단순한 무언가로갔습니다. 이것은 내가 본 다른 스 니펫의 합병과 Yui 팀의 제안입니다. IE8+, Firefox, Chrome 및 Safari (Windows 용)에서 작동하는 것으로 보입니다.

// To disable logging when posting a production release, just change this to false.
var debugMode = false;

// Support logging to console in all browsers even if the console is disabled. 
var log = function (msg) {
    debugMode && window.console && console.log ? console.log(msg) : null;
};

메모: 플래그를 통해 콘솔에 로깅을 비활성화하는 것을 지원합니다. 아마도 빌드 스크립트를 통해 이것을 자동화 할 수 있습니다. 또는 런타임 에이 플래그를 뒤집기 위해 UI 또는 다른 메커니즘을 노출시킬 수 있습니다. 물론 로깅 레벨을 사용하면 로그 임계 값을 기반으로 로그의 AJAX 제출을 통해 훨씬 더 정교하게 얻을 수 있습니다 (예 : 모든 오류 레벨 문은 스토리지가있는 서버로 전송됩니다).

로깅에 관한 이러한 스레드/질문 중 다수는 로그 문을 코드가 아닌 디버그 코드로 생각하는 것 같습니다. 수단. 따라서 로그 문을 제거하려는 욕구. 계측은 응용 프로그램이 야생에있을 때 매우 유용하며 더 이상 디버거를 첨부하기 쉽지 않거나 사용자에게 또는 지원을 통해 정보를 공급합니다. 개인 정보 보호/보안을 손상시키지 않아야하는 위치에 관계없이 민감한 것을 기록해서는 안됩니다. 로깅을 계측으로 생각하면 이제 프로덕션 코드가되어 동일한 표준으로 기록되어야합니다.

더 복잡한 JavaScript를 사용하는 응용 프로그램에서는 계측이 중요하다고 생각합니다.

다른 언급이있는 것처럼 대부분의 브라우저에서 오류가 발생합니다. Firefox 4에서는 오류가 발생하지 않으며 메시지는 웹 개발자 콘솔 (Firefox 4의 새로운)에 로그인됩니다.

내가 정말로 좋아하는 실수에 대한 하나의 해결 방법은 DE && 버그:

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);

멋진 원 라이너 :

(!console) ? console.log=function(){} : console.log('Logging is supported.');
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top