Nodejs 進階:用 debug 模組列印除錯日誌

程式猿小卡_casper發表於2017-04-25

本文摘錄自《Nodejs學習筆記》,更多章節及更新,請訪問 github主頁地址。歡迎加群交流,群號 197339705

前言

在node程式開發中時,經常需要列印除錯日誌。用的比較多的是debug模組,比如express框架中就用到了。下文簡單舉幾個例子進行說明。文中相關程式碼示例,可在這裡找到。

備註:node在0.11.3版本也加入了util.debuglog()用於列印除錯日誌,使用方法跟debug模組大同小異。

基礎例子

首先,安裝debug模組。

npm install debug複製程式碼

使用很簡單,執行node程式時,加上DEBUG=app環境變數即可。

/**
 * debug基礎例子
 */
var debug = require('debug')('app');

// 執行 DEBUG=app node 01.js
// 輸出:app hello +0ms
debug('hello');複製程式碼

例子:名稱空間

當專案程式變得複雜,我們需要對日誌進行分類列印,debug支援命令空間,如下所示。

  • DEBUG=app,api:表示同時列印出名稱空間為app、api的除錯日誌。
  • DEBUG=a*:支援萬用字元,所有名稱空間為a開頭的除錯日誌都列印出來。
/**
 * debug例子:名稱空間
 */
var debug = require('debug');
var appDebug = debug('app');
var apiDebug = debug('api');

// 分別執行下面幾行命令看下效果
// 
//     DEBUG=app node 02.js
//     DEBUG=api node 02.js
//     DEBUG=app,api node 02.js
//     DEBUG=a* node 02.js
//     
appDebug('hello');
apiDebug('hello');複製程式碼

例子:名稱空間排除

有的時候,我們想要列印出所有的除錯日誌,除了個別名稱空間下的。這個時候,可以通過-來進行排除,如下所示。-account*表示排除所有以account開頭的名稱空間的除錯日誌。

/**
 * debug例子:排查名稱空間
 */
var debug = require('debug');
var listDebug = debug('app:list');
var profileDebug = debug('app:profile');
var loginDebug = debug('account:login');

// 分別執行下面幾行命令看下效果
// 
//     DEBUG=* node 03.js
//     DEBUG=*,-account* node 03.js
//     
listDebug('hello');
profileDebug('hello');
loginDebug('hello');複製程式碼

例子:自定義格式化

debug也支援格式化輸出,如下例子所示。

var debug = require('debug')('app');

debug('my name is %s', 'chyingp');複製程式碼

此外,也可以自定義格式化內容。

/**
 * debug:自定義格式化
 */
var createDebug = require('debug')

createDebug.formatters.h = function(v) {
  return v.toUpperCase();
};

var debug = createDebug('foo');

// 執行 DEBUG=foo node 04.js 
// 輸出 foo My name is CHYINGP +0ms
debug('My name is %h', 'chying');複製程式碼

相關連結

debug:github.com/visionmedia…
debuglog:nodejs.org/api/util.ht…

相關文章