我們首先創(chuàng)建如下文件:
// index.js let fs = require('fs'); let options = { flags: 'a', // append模式 encoding: 'utf8', // utf8編碼 }; let stdout = fs.createWriteStream('./stdout.log', options); let stderr = fs.createWriteStream('./stderr.log', options); // 創(chuàng)建logger let logger = new console.Console(stdout, stderr); for (let i = 0; i < 100; i++) { logger.log(`log message ${i}`); logger.error(`err message ${i}`); }
在上面代碼中,我們其實(shí)是創(chuàng)建了一個(gè)console.Console類(lèi)的實(shí)例,該類(lèi)需要指定兩個(gè)參數(shù),即標(biāo)準(zhǔn)輸出流和標(biāo)準(zhǔn)錯(cuò)誤輸出流,正常情況下,實(shí)際上是對(duì)應(yīng)了process.stdout和process.stderr,以上的代碼中,我們將這兩個(gè)輸出流改為了文件輸出流,并指定為文件追加模式,這樣即可將日志信息輸出到指定的文件中去。運(yùn)行上面的代碼,會(huì)生成stdout.log和stderr.log兩個(gè)文件。
stdout.log文件內(nèi)容如下:
log message 0 log message 1 log message 2 log message 3 log message 4 log message 5 log message 6 log message 7 log message 8 log message 9 log message 10 ...
stderr.log文件內(nèi)容如下:
err message 0 err message 1 err message 2 err message 3 err message 4 err message 5 err message 6 err message 7 err message 8 err message 9 err message 10 ...
看上去信息還比較簡(jiǎn)單,不像是日志文件的樣子,我們或許得為每條日志添加一個(gè)時(shí)間才行,下面先為Date對(duì)象添加一個(gè)format的原型方法:
// 添加format方法 Date.prototype.format = function (format) { if (!format) { format = 'yyyy-MM-dd HH:mm:ss'; } // 用0補(bǔ)齊指定位數(shù) let padNum = function (value, digits) { return Array(digits - value.toString().length + 1).join('0') + value; }; // 指定格式字符 let cfg = { yyyy: this.getFullYear(), // 年 MM: padNum(this.getMonth() + 1, 2), // 月 dd: padNum(this.getDate(), 2), // 日 HH: padNum(this.getHours(), 2), // 時(shí) mm: padNum(this.getMinutes(), 2), // 分 ss: padNum(this.getSeconds(), 2), // 秒 fff: padNum(this.getMilliseconds(), 3), // 毫秒 }; return format.replace(/([a-z]|[A-Z])(\1)*/ig, function (m) { return cfg[m]; }); }
然后再改寫(xiě)前面的主文件:
// index.js let fs = require('fs'); let options = { flags: 'a', // append模式 encoding: 'utf8', // utf8編碼 }; let stdout = fs.createWriteStream('./stdout.log', options); let stderr = fs.createWriteStream('./stderr.log', options); // 創(chuàng)建logger let logger = new console.Console(stdout, stderr); // 添加format方法 Date.prototype.format = function (format) { if (!format) { format = 'yyyy-MM-dd HH:mm:ss'; } // 用0補(bǔ)齊指定位數(shù) let padNum = function (value, digits) { return Array(digits - value.toString().length + 1).join('0') + value; }; // 指定格式字符 let cfg = { yyyy: this.getFullYear(), // 年 MM: padNum(this.getMonth() + 1, 2), // 月 dd: padNum(this.getDate(), 2), // 日 HH: padNum(this.getHours(), 2), // 時(shí) mm: padNum(this.getMinutes(), 2), // 分 ss: padNum(this.getSeconds(), 2), // 秒 fff: padNum(this.getMilliseconds(), 3), // 毫秒 }; return format.replace(/([a-z]|[A-Z])(\1)*/ig, function (m) { return cfg[m]; }); } for (let i = 0; i < 100; i++) { let time = new Date().format('yyyy-MM-dd HH:mm:ss.fff'); logger.log(`[${time}] - log message ${i}`); logger.error(`[${time}] - err message ${i}`); }
重新運(yùn)行程序,然后查看兩個(gè)日志文件的內(nèi)容。
stdout.log內(nèi)容如下:
[2018-04-27 07:30:54.309] - log message 0 [2018-04-27 07:30:54.312] - log message 1 [2018-04-27 07:30:54.312] - log message 2 [2018-04-27 07:30:54.312] - log message 3 [2018-04-27 07:30:54.312] - log message 4 [2018-04-27 07:30:54.312] - log message 5 [2018-04-27 07:30:54.312] - log message 6 [2018-04-27 07:30:54.312] - log message 7 [2018-04-27 07:30:54.312] - log message 8 [2018-04-27 07:30:54.312] - log message 9 [2018-04-27 07:30:54.312] - log message 10 ...
stderr.log內(nèi)容如下:
[2018-04-27 07:30:54.309] - err message 0 [2018-04-27 07:30:54.312] - err message 1 [2018-04-27 07:30:54.312] - err message 2 [2018-04-27 07:30:54.312] - err message 3 [2018-04-27 07:30:54.312] - err message 4 [2018-04-27 07:30:54.312] - err message 5 [2018-04-27 07:30:54.312] - err message 6 [2018-04-27 07:30:54.312] - err message 7 [2018-04-27 07:30:54.312] - err message 8 [2018-04-27 07:30:54.312] - err message 9 [2018-04-27 07:30:54.312] - err message 10 ...
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注Gxl網(wǎng)其它相關(guān)文章!
推薦閱讀
Node.js文件編碼格式轉(zhuǎn)換方式匯總
如何給微信小程序內(nèi)添加客服按鈕
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com