멋진 커뮤니티 모듈

디버그

빌드 상태 보장 상태 느슨하게 오픈콜렉티브 오픈콜렉티브

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

작업자.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 오후 12시 53분 04시 스크린샷 2017-08-08 오후 12시 53분 38시 스크린샷 2017-08-08 오후 12시 53분 25시

윈도우 노트

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

와일드카드

문자 *는 와일드카드로 사용될 수 있습니다. 예를 들어 라이브러리에 "connect:bodyParser", "connect:compress", "connect:session"이라는 이름의 디버거가 있다고 가정하면 3개를 모두 나열하는 대신 간단히 를 수행하거나 다음을 실행할 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/ 포맷터와 함께 사용되는 옵션 개체로 변환됩니다. 전체 목록은 %ONode.js 설명서를 참조하세요 .util.inspect()

포맷터

디버그는 printf 스타일 형식을 사용합니다. 공식적으로 지원되는 형식은 다음과 같습니다.

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

Custom formatters

객체를 확장하여 사용자 정의 포맷터를 추가할 수 있습니다 debug.formatters. 예를 들어 버퍼를 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-as-a-service 빌드를 사용할 수도 있습니다.

디버그 활성화 상태는 현재 에 의해 유지됩니다 . 및 가 있고 두 가지를 모두 디버깅하려는 localStorage아래 표시된 상황을 고려하십시오 . 다음을 사용하여 이를 활성화할 수 있습니다 .worker:aworker:blocalStorage.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);

출력 스트림

기본적으로 debugstderr에 기록되지만, 메소드를 재정의하여 네임스페이스별로 구성할 수 있습니다 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
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 홀로웨이추크
  • 네이선 라즈리치
  • 앤드류 라인

후원자

매달 기부금으로 후원해주시고, 지속적인 활동을 도와 주세요 .

후원자

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

특허

(MIT 라이센스)

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

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

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

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