멋진 커뮤니티 모듈

디버그

빌드 상태 보장 상태 느슨하게 OpenCollective OpenCollective

Node.js 코어의 디버깅 기술을 모델로 한 작은 JavaScript 디버깅 유틸리티로 Node.js와 웹 브라우저에서 작동합니다.

설치

1
$ npm install debug

용법

debug 는 함수를 노출합니다.이 함수에 모듈 이름을 전달하면 디버그 문을 전달할 수있는 console.error 의 데코 레이팅 된 버전이 반환됩니다. 이렇게하면 모듈의 다른 부분에 대한 디버그 출력을 다음과 같이 전환 할 수 있습니다. 모듈 전체도 마찬가지입니다.

예제 app.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
var debug = require('debug')('http') , http = require('http') , name = 'My App'; // fake app debug('booting %o', name); http.createServer(function(req, res){ debug(req.method + ' ' + req.url); res.end('hello\n'); }).listen(3000, function(){ debug('listening'); }); // fake worker of some kind require('./worker');

worker.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
var a = require('debug')('worker:a') , b = require('debug')('worker:b'); function work() { a('doing lots of uninteresting work'); setTimeout(work, Math.random() * 1000); } work(); function workb() { b('doing some work'); setTimeout(workb, Math.random() * 2000); } workb();

그런 다음 DEBUG 환경 변수를 사용하여 공백 또는 쉼표로 구분 된 이름을 기반으로 활성화합니다.

여기 예시들이 있습니다 :

스크린 샷 2017-08-08 at 12 53 04 pm스크린 샷 2017-08-08 at 12 53 38 pm스크린 샷 2017-08-08 at 12 53 25 pm

Windows 참고

Windows에서 환경 변수는 set 명령을 사용하여 set 됩니다.

1
set DEBUG=*,-not_this

PowerShell은 다른 구문을 사용하여 환경 변수를 설정합니다.

1
$env:DEBUG = "*,-not_this"

그런 다음 평소처럼 디버깅 할 프로그램을 실행합니다.

네임 스페이스 색상

모든 디버그 인스턴스에는 네임 스페이스 이름을 기반으로 생성 된 색상이 있습니다. 이는 디버그 출력을 시각적으로 구문 분석하여 디버그 라인이 속한 디버그 인스턴스를 식별 할 때 도움이됩니다.

Node.js

Node.js에서는 stderr이 TTY 일 때 색상이 활성화됩니다. 또한 디버그와 함께 supports-color 모듈을 설치 해야합니다 . 그렇지 않으면 디버그는 소수의 기본 색상 만 사용합니다.

웹 브라우저

%c 서식 옵션을 이해하는 "웹 검사기"에서도 색상이 활성화됩니다. 이들은 WebKit 웹 검사기, Firefox ( 버전 31 이후 ) 및 Firefox 용 Firebug 플러그인 (모든 버전)입니다.

밀리 초 차이

응용 프로그램을 적극적으로 개발할 때 하나의 debug() 호출과 다음 호출 사이에 소요 된 시간을 확인하는 것이 유용 할 수 있습니다. 예를 들어 리소스를 요청하기 전에 debug() 를 호출하고 이후에도 "+ NNNms"가 표시된다고 가정합니다. 통화 사이에 소요 된 시간.

stdout이 TTY가 아닌 경우 Date#toISOString() 이 사용되므로 아래와 같이 디버그 정보를 로깅하는 데 더 유용합니다.

규약

하나 또는 더 라이브러리의를 사용하는 경우, 당신이 그렇게 개발자가 이름을 추측하지 않고 원하는대로 디버깅 전환 할 수 있다는 라이브러리의 이름을 사용해야합니다. 두 개 이상의 디버거이있는 경우 라이브러리 이름을 접두사해야하며, ":"를 사용하여 기능을 분리합니다. 예를 들어 Connect의 "bodyParser"는 "connect : bodyParser"가됩니다. 이름 끝에 "*"를 추가하면 DEBUG 설정에 관계없이 항상 활성화됩니다. 환경 변수입니다. 그런 다음 일반 출력과 디버그 출력에 사용할 수 있습니다.

와일드 카드

* 문자를 와일드 카드로 사용할 수 있습니다. 예를 들어 라이브러리에 DEBUG=connect:bodyParser,connect:compress,connect:session 세 가지를 모두 나열하는 대신 "connect : bodyParser", "connect : compress", "connect : session"이라는 이름의 디버거가 있다고 가정 DEBUG=connect:bodyParser,connect:compress,connect:session , 간단히 DEBUG=connect:* 를 수행 DEBUG=connect:* 모듈을 사용하여 모든 것을 실행하려면 DEBUG=* .

"-"문자를 접두사로 붙여 특정 디버거를 제외 할 수도 있습니다. 예를 들어 DEBUG=*,-connect:* 는 "connect :"로 시작하는 디버거를 제외한 모든 디버거를 포함합니다.

환경 변수

Node.js를 통해 실행할 때 디버그 로깅의 동작을 변경하는 몇 가지 환경 변수를 설정할 수 있습니다.

이름 목적
DEBUG 특정 디버깅 네임 스페이스를 활성화 / 비활성화합니다.
DEBUG_HIDE_DATE 디버그 출력에서 ​​날짜를 숨 깁니다 (TTY가 아님).
DEBUG_COLORS 디버그 출력에서 ​​색상을 사용할지 여부입니다.
DEBUG_DEPTH 물체 검사 깊이.
DEBUG_SHOW_HIDDEN 검사 된 개체에 숨겨진 속성을 표시합니다.

참고 : DEBUG_ 시작하는 환경 변수는 결국 %o / %O 포맷터와 함께 사용되는 Options 객체로 변환됩니다. 전체 목록은 util.inspect() 대한 Node.js 설명서를 참조하십시오.

포맷터

디버그는 printf 스타일 형식을 사용합니다. 다음은 공식적으로 지원되는 형식 지정 도구입니다.

포맷터 대표
%O 여러 줄에 개체를 예쁘게 인쇄합니다.
%o 한 줄에 모든 개체를 예쁘게 인쇄합니다.
%s 끈.
%d 숫자 (정수 및 부동 소수점 둘 다).
%j JSON. 인수에 순환 참조가 포함 된 경우 '[Circular]'문자열로 대체됩니다.
%% 단일 퍼센트 기호 ( '%'). 인수를 사용하지 않습니다.

Custom formatters

debug.formatters 객체를 확장하여 사용자 정의 포맷터를 추가 할 수 있습니다. 예를 들어 %h 사용하여 Buffer를 16 진수로 렌더링하는 지원을 추가하려면 다음과 같이 할 수 있습니다.

1 2 3 4 5 6 7 8 9
const createDebug = require('debug') createDebug.formatters.h = (v) => { return v.toString('hex') } // …elsewhere const debug = createDebug('foo') debug('this is hex: %h', new Buffer('hello world')) // foo this is hex: 68656c6c6f20776f726c6421 +0ms

브라우저 지원

browserify를 사용하여 브라우저 지원 스크립트를 빌드하거나 직접 빌드하지 않으려는 경우 browserify-as-a-service 빌드 를 사용할 수 있습니다.

디버그의 활성화 상태는 현재 localStorage 의해 유지됩니다. worker:aworker:b 가 있고 둘 다 디버깅하려는 경우 아래에 표시된 상황을 고려하십시오. localStorage.debug 사용하여 활성화 할 수 있습니다.

1
localStorage.debug = 'worker:*'

그런 다음 페이지를 새로 고칩니다.

1 2 3 4 5 6 7 8 9 10
a = debug('worker:a'); b = debug('worker:b'); setInterval(function(){ a('doing some work'); }, 1000); setInterval(function(){ b('doing some work'); }, 1200);

출력 스트림

기본적으로 debug 는 stderr에 기록되지만 log 메소드를 재정 의하여 네임 스페이스별로 구성 할 수 있습니다.

stdout.js 예 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var debug = require('debug'); var error = debug('app:error'); // by default stderr is used error('goes to stderr!'); var log = debug('app:log'); // set this namespace to log via console.log log.log = console.log.bind(console); // don't forget to bind to console! log('goes to stdout'); error('still goes to stderr!'); // set all output to go via console.info // overrides all per-namespace log settings debug.log = console.info.bind(console); error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now');

동적으로 설정

enable() 메서드를 호출하여 디버그를 동적으로 활성화 할 수도 있습니다.

1 2 3 4 5 6 7 8 9 10
let debug = require('debug'); console.log(1, debug.enabled('test')); debug.enable('test'); console.log(2, debug.enabled('test')); debug.disable(); console.log(3, debug.enabled('test'));

인쇄:

1 2 3
1 false 2 true 3 false

용법:
enable(namespaces)
namespaces 에는 콜론과 와일드 카드로 구분 된 모드가 포함될 수 있습니다.

enable() 호출은 이전에 설정된 DEBUG 변수를 완전히 재정의합니다.

1 2
$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' => false

디버그 타겟이 활성화되어 있는지 확인

디버그 인스턴스를 만든 후 enabled 속성을 확인하여 enabled 여부를 확인할 enabled 있습니다.

1 2 3 4 5
const debug = require('debug')('http'); if (debug.enabled) { // do stuff... }

이 속성을 수동으로 전환하여 디버그 인스턴스를 강제로 활성화 또는 비활성화 할 수도 있습니다.

저자

  • TJ 홀로 웨이 추크
  • Nathan Rajlich
  • 앤드류 라인

후원자

매달 기부 우리가 우리의 활동을 계속 도움으로 우리를 지원합니다. [ 후원자가 되십시오 ]

스폰서

스폰서가되어 사이트 링크와 함께 Github의 README에서 로고를 받으세요. [ 스폰서되기 ]

특허

(MIT 라이선스)

Copyright (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >

사용, 복사, 수정, 병합 권한을 포함하되 이에 국한되지 않는 제한없이 소프트웨어를 처리 할 수있는 권한이이 소프트웨어 및 관련 문서 파일 ( '소프트웨어')의 사본을 획득 한 모든 사람에게 무료로 부여됩니다. 다음 조건에 따라 소프트웨어의 사본을, 게시, 배포, 재 라이센스 및 / 또는 판매하고 소프트웨어를 제공받은 사람이 그렇게하도록 허용합니다.

위의 저작권 고지 및이 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함되어야합니다.

소프트웨어는 상품성, 특정 목적에의 적합성 및 비 침해에 대한 보증을 포함하되 이에 국한되지 않는 어떠한 종류의 명시 적 또는 묵시적 보증없이 '있는 그대로'제공됩니다. 계약, 불법 행위 또는 기타 방식으로 소프트웨어 또는 소프트웨어의 사용 또는 기타 거래와 관련하여 발생하는 청구, 손해 또는 기타 책임.