如果你有開發 Node.js 的經驗,一定相當常運用其內建的 console.log()
來作為 Debug 的方式之一。
而當整個系統完成或上線之後,就比較無法使用這種方式去找後續發生的問題,因為我們不見得能看到系統端終端機中的內容,但若為了這個紀錄功能要多寫一個 function 然後替換掉原本拿來 debug 用的 console.log …這也太麻煩了吧。
幸運的是,JavaScript 允許你用 Override 的方式來覆寫原有的程式,改成你所需要的樣子。
等一下我們就要來覆寫 console.log
這個 function 來為它加入時間戳記以及寫入一個檔案作為紀錄的功能。
開始之前
在這支程式中,我為了方便產生時間格式,有使用到 date-utils 這個模組,所以請記得在你的 Node.js 專案資料夾中安裝
1 2 |
npm install date-utils --save |
並在程式碼上方加入
1 2 |
require('date-utils') |
已便使用這個模組提供的 toFormat 功能。
程式碼
在你的程式中加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// log override console.log=(function() { var orig = console.log; return function() { try { var tmp=process.stdout; process.stdout=process.stderr; // get now var now = new Date(); // format time var now_formated = now.toFormat("YYYY-MM-DD HH24:MI:SS"); var strDate = '[' + now_formated + '] '; if (Buffer.isBuffer(arguments[0])) { arguments[0] = strDate + arguments[0]; } else if (typeof arguments[0] !== 'object') { arguments[0] = strDate + arguments[0]; } else if (typeof arguments[0] === 'object') { arguments[0] = strDate + JSON.stringify(arguments[0]); } orig.apply(console, arguments); } finally { process.stdout=tmp; } }; })(); |
然後執行你的程式,應該就會看到類似下方的訊息,這樣是不是更好紀錄與找問題了呢?
1 2 |
[2015-12-19 20:15:35] Hello, World! |