素晴らしいコミュニティモジュール

デバッグ

ビルドステータス 取材状況 スラック OpenCollective OpenCollective

Node.js コアのデバッグ手法をモデルにした小さな JavaScript デバッグ ユーティリティで、Node.js と Web ブラウザーで動作します。

インストール

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 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フォーマット オプションを理解する「Web インスペクター」でも有効になっています.WebKit Web インスペクター、Firefox (バージョン 31 以降)、Firefox 用の Firebug プラグイン (任意のバージョン)。

ミリ秒差分

アプリケーションを積極的に開発している場合、あるdebug()呼び出しと次の呼び出しの間に費やされた時間を確認すると便利です.たとえばdebug()、リソースを要求する前に呼び出すとします.コール間。

stdout が TTY ではない場合、Date#toISOString()が使用され、以下に示すようにデバッグ情報をログに記録するのにより役立ちます。

規約

1 つまたは複数のライブラリでこれ使用している場合、開発者が名前を推測せずにデバッグを必要に応じて切り替えることができるように、ライブラリの名前を使用する必要があります。複数のデバッガがある場合、ライブラリ名と機能を区切るには ":" を使用します。たとえば、Connect の "bodyParser" は "connect:bodyParser" になります。名前の最後に "*" を追加すると、DEBUG の設定に関係なく常に有効になります環境変数. その後、通常の出力とデバッグ出力に使用できます。

ワイルドカード

*文字がワイルドカードとして使用することができる例えば、あなたのライブラリーは、名前のデバッガがあるとします。「接続を:bodyParser」、「接続:圧縮」、「接続:セッション」、代わりにして、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/%Oフォーマッタで使用される Options オブジェクトに変換されutil.inspect() ます。完全なリストについては、Node.js のドキュメントを参照してください

フォーマッタ

デバッグはprintf スタイルのフォーマットを使用します。公式にサポートされているフォーマッタは次のとおりです。

フォーマッタ 表現
%O Object を複数行にきれいに印刷します。
%o オブジェクトをすべて 1 行できれいに印刷します。
%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: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 >

これにより、このソフトウェアおよび関連するドキュメント ファイル (「ソフトウェア」) のコピーを取得するすべての人に、使用、コピー、変更、マージの権利を含むがこれらに限定されない、制限なしにソフトウェアを取り扱うことを無料で許可します。 、公開、配布、サブライセンス、および/またはソフトウェアのコピーを販売し、ソフトウェアが提供される人に、次の条件に従って、そのようなことを許可すること:

上記の著作権表示およびこの許可通知は、本ソフトウェアのすべてのコピーまたは実質的な部分に含まれるものとします。

本ソフトウェアは「現状有姿」で提供され、明示または黙示を問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証もなしに提供されます。契約、不法行為またはその他の行為のいずれにおいても、本ソフトウェアまたは本ソフトウェアの使用またはその他の取引に起因または関連して生じる損害またはその他の責任。