내 코드에서 모든 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() {};
}
DEBUG
console.log 함수를 대체 하려면 플래그 를 변경하십시오 . 이것은 트릭을해야합니다.
var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
console.log = function() {}
}
아무도 대답하지 않은 모든 대답에 놀랐습니다.
- jquery 없음
- 글로벌 네임 스페이스를 오염시키지 않는 익명 함수
- window.console이 정의되지 않은 경우 처리
- 콘솔의 .log 기능을 수정하십시오.
나는 이것을 갈 것이다.
(function () {
var debug = false
if (debug === false) {
if ( typeof(window.console) === 'undefined') { window.console = {}; }
window.console.log = function () {};
}
})()
IE7을 사용하는 경우 콘솔이 정의되지 않습니다. 따라서 IE 친화적 인 버전은 다음과 같습니다.
if (typeof console == "undefined" || typeof console.log == "undefined")
{
var console = { log: function() {} };
}
이 문제를 검색하고 내 코르도바 앱에서 시도한 후에 모든 개발자에게 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) {
}
이것은 SolutionYogi 와 Chris 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');
});
Grunt를 사용하면 console.log 문을 제거 / 코멘트하기 위해 작업을 추가 할 수 있습니다. 따라서 console.log는 더 이상 호출되지 않습니다.
https://www.npmjs.org/package/grunt-remove-logging-calls
이전에 윈스턴 로거를 사용했습니다 .
요즘에는 경험에서보다 간단한 코드를 사용하고 있습니다.
cmd / 명령 행에서 환경 변수를 설정하십시오 (Windows의 경우).
cmd setx LOG_LEVEL info
또는 원하는 경우 코드에 변수를 가질 수 있지만 위의 것이 좋습니다.
cmd / 명령 행 또는 Netbeans와 같은 IDE / 편집기를 다시 시작하십시오.
아래 코드와 같이하십시오 :
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; }
다음과 같이 모든 콘솔을 사용하십시오. *
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
명령 줄 다시 시작)을 기반으로 위의 일부가 인쇄되고 나머지는 인쇄되지 않습니다
도움이 되었기를 바랍니다.
경고 : 뻔뻔한 플러그!
내 JsTrace 객체와 같은 것을 사용하여 모듈 수준 "전환"기능을 갖춘 모듈 식 추적 기능을 사용하여 당시에보고 싶은 것을 켜십시오.
(또한 관심있는 사람들을 위해 NuGet 패키지가 있습니다)
모든 레벨은 "오류"로 기본 설정되어 있지만 "끄기"상태 일 수 있습니다. 그래도 왜 오류를보고 싶지 않을지 모르겠습니다.
다음과 같이 변경할 수 있습니다.
Trace.traceLevel('ModuleName1', Trace.Levels.log);
Trace.traceLevel('ModuleName2', Trace.Levels.info);
티
이 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() {};
}
이 사용 사례를위한 라이브러리를 개발했습니다 : https://github.com/sunnykgupta/jsLogger
풍모:
- console.log를 안전하게 재정의합니다.
- 콘솔을 사용할 수없는 경우주의를 기울입니다 (예, 해당 요소도 고려해야합니다).
- 나중에 검색 할 수 있도록 모든 로그를 저장합니다 (억제 되더라도).
- 핸들 주요 콘솔 기능이 좋아
log
,warn
,error
,info
.
수정 가능하며 새로운 제안이 올 때마다 업데이트됩니다.
이것은 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);
나는 문제를 해결하기 위해 다음을 사용했습니다.
var debug = 1;
var logger = function(a,b){ if ( debug == 1 ) console.log(a, b || "");};
디버깅을 활성화하려면 debug를 1로 설정하십시오. 그런 다음 디버그 텍스트를 출력 할 때 로거 기능을 사용하십시오. 또한 두 개의 매개 변수를 허용하도록 설정되었습니다.
그래서 대신
console.log("my","log");
사용하다
logger("my","log");
나는 이것을 썼다 :
//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.*
기능 을 비활성화 / 재정의하는 포괄적 인 솔루션 이 여기 있습니다 .
물론, 필요한 상황을 확인한 후 포함 시키십시오. 예를 들어 프로덕션 릴리스를 포함하여 다른 중요한 구성 요소를 폭격하지 않습니다.
여기에 인용 :
"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");
})();
꿀꺽 꿀꺽 사용하는 경우 다음 플러그인을 사용할 수 있습니다 .
다음 명령으로이 플러그인을 설치하십시오.
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/" ) ); });
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() {};
}
javascript AOP (예 : jquery-aop )를 사용하여 console.debug / log (around)에 대한 모든 호출을 가로 채고 일부 전역 변수가 false로 설정된 경우 실제 호출을 진행할 수 없습니다.
서버에서 로그 사용 / 사용 안함 동작을 변경할 수있는 아약스 호출 (지금도 가능)을 수행 할 수도 있습니다. 이는 스테이징 환경 등에서 문제가 발생할 때 디버깅을 사용하는 것이 매우 흥미로울 수 있습니다.
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')
모든 로그 메시지를 완전히 비활성화 할 수도 있습니다 .
이 문제에 대한 연구 개발을 마친 후에는이 솔루션을 발견하여 선택에 따라 경고 / 오류 / 로그를 숨길 수 있습니다.
(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 자체에 있기 때문입니다.
감사!!
'Programing' 카테고리의 다른 글
자바 : 유닉스 타임 스탬프 날짜 (0) | 2020.04.18 |
---|---|
Web Api의 요청과 일치하는 여러 조치가 발견되었습니다. (0) | 2020.04.18 |
Rails 4에서 lib 파일 자동 로딩 (0) | 2020.04.18 |
git diff-긴 줄을 처리합니까? (0) | 2020.04.18 |
Android 대화 상자 Fragment vs Dialog (0) | 2020.04.17 |