멋진 커뮤니티 모듈

디버그

빌드 상태 적용 상태 느슨하게 오픈컬렉티브 오픈컬렉티브

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에서 환경 변수는 set명령을 사용하여 설정됩니다 .

1
set DEBUG=*,-not_this

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

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

그런 다음 평소와 같이 디버깅할 프로그램을 실행합니다.

네임스페이스 색상

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

노드.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/ %Oformatters 와 함께 사용되는 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 홀로웨이척
  • 네이선 라즐리치
  • 앤드류 라인

후원자

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

스폰서

스폰서가되어 귀하의 사이트에 대한 링크와 Github에서에 우리의 README에 로고를 얻을. 후원자가 되십시오 ]

특허

(MIT 라이선스)

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

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

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

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