Awesome 社区模块

debug

ビルドステータス カバレッジステータス スラック OpenCollective OpenCollective

A tiny JavaScript debugging utility modelled after Node.js core's debugging technique. Works in Node.js and web browsers.

Installation

1
$ npm install debug

Usage

debug exposes a function; simply pass this function the name of your module, and it will return a decorated version of console.error for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.

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

Example 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();

The DEBUG environment variable is then used to enable these based on space or comma-delimited names.

Here are some examples:

スクリーンショット2017-08-08at 12 53 04 pm スクリーンショット2017-08-08at 12 53 38 pm スクリーンショット2017-08-08at 12 53 25 pm

Windows note

On Windows the environment variable is set using the set command.

1
set DEBUG=*,-not_this

Note that PowerShell uses different syntax to set environment variables.

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

Then, run the program to be debugged as usual.

Namespace Colors

Every debug instance has a color generated for it based on its namespace name. This helps when visually parsing the debug output to identify which debug instance a debug line belongs to.

Node.js

In Node.js, colors are enabled when stderr is a TTY. You also should install the supports-color module alongside debug, otherwise debug will only use a small handful of basic colors.

Web Browser

Colors are also enabled on "Web Inspectors" that understand the %c formatting option. These are WebKit web inspectors, Firefox (since version 31) and the Firebug plugin for Firefox (any version).

Millisecond diff

アプリケーションを積極的に開発する場合、あるdebug()呼び出しと次の呼び出しの間に費やされた時間を確認すると便利です。たとえばdebug()、リソースを要求する前に呼び出し、その後も「+ NNNms」が費やされた時間を表示するとします。呼び出しの合間に。

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

コンベンション

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

ワイルドカード

The * character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with DEBUG=connect:bodyParser,connect:compress,connect:session, you may simply do DEBUG=connect:*, or to run everything using this module simply use DEBUG=*.

You can also exclude specific debuggers by prefixing them with a "-" character. For example, DEBUG=*,-connect:* would include all debuggers except those starting with "connect:".

Environment Variables

When running through Node.js, you can set a few environment variables that will change the behavior of the debug logging:

Name Purpose
DEBUG Enables/disables specific debugging namespaces.
DEBUG_HIDE_DATE Hide date from debug output (non-TTY).
DEBUG_COLORS Whether or not to use colors in the debug output.
DEBUG_DEPTH 対象物の検査深度。
DEBUG_SHOW_HIDDEN 検査されたオブジェクトの非表示のプロパティを表示します。

注:最初の環境変数DEBUG_は、%o/%Oフォーマッターで使用されるOptionsオブジェクトに変換されutil.inspect() ます。完全なリストについては、Node.jsのドキュメントを参照してください

フォーマッター

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

フォーマッター 表現
%O オブジェクトを複数行にきれいに印刷します。
%o オブジェクトをすべて1行にきれいに印刷します。
%s 弦。
%d 数値(整数と浮動小数点の両方)。
%j JSON。引数に循環参照が含まれている場合は、文字列「[Circular]」に置き換えられます。
%% 単一パーセント記号( '%')。これは引数を消費しません。

Custom formatters

You can add custom formatters by extending the debug.formatters object. For example, if you wanted to add support for rendering a Buffer as hex with %h, you could do something like:

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

Browser Support

You can build a browser-ready script using browserify, or just use the browserify-as-a-service build, if you don't want to build it yourself.

Debug's enable state is currently persisted by localStorage. Consider the situation shown below where you have worker:a and worker:b, and wish to debug both. You can enable this using localStorage.debug:

1
localStorage.debug = 'worker:*'

And then refresh the page.

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

Output streams

By default debug will log to stderr, however this can be configured per-namespace by overriding the log method:

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

Set dynamically

You can also enable debug dynamically by calling the enable() method :

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

print :

1 2 3
1 false 2 true 3 false

Usage :
enable(namespaces)
namespaces can include modes separated by a colon and wildcards.

Note that calling enable() completely overrides previously set DEBUG variable :

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

Checking whether a debug target is enabled

After you've created a debug instance, you can determine whether or not it is enabled by checking the enabled property:

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

You can also manually toggle this property to force the debug instance to be enabled or disabled.

Authors

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Backers

Support us with a monthly donation and help us continue our activities. [Become a backer]

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]

License

(The MIT License)

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

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

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