멋진 커뮤니티 모듈

디버그

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

Node.js 코어의 디버깅 기술을 모델로 한 작은 자바 스크립트 디버깅 유틸리티로 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명령을 사용하여 설정됩니다 .

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의 설정에 관계없이 항상 활성화됩니다. 환경 변수입니다. 그런 다음 일반 출력과 디버그 출력에 사용할 수 있습니다.

와일드 카드

*. 문자는 예를 들어 가정 와일드 카드로 사용할 수 있습니다 라이브러리는 디버거는 "연결 : bodyParser"라는있다 "압축 연결", "연결 : 세션"대신에 세 가지를 모두 나열하는 DEBUG=connect:bodyParser,connect:compress,connect:session, 당신은 간단하게 할 수 있습니다 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객체 를 확장하여 사용자 정의 포맷터를 추가 할 수 있습니다 . 예를 들어를 사용하여 Buffer를 16 진수로 렌더링하는 지원을 추가 %h하려면 다음과 같이 할 수 있습니다.

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 서비스로서의 빌드를 당신이 그것을 직접 구축하지 않으려면.

디버그의 상태는 현재에 의해 유지됩니다 수 있도록 localStorage당신이이 곳 아래에 표시 상황을 생각해 보자. worker:a그리고 worker: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속성 을 확인하여 활성화 여부를 확인할 수 있습니다.

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 >

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

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

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