Node.js利用console輸出日志文件的方法示例
通常我們在寫Node.js程序時,都習(xí)慣使用console.log打印日志信息,但這也僅限于控制臺輸出,有時候我們需要將信息輸出到日志文件中,實際上利用console也可以達(dá)到這個目的的,今天就來簡單介紹一下。
我們首先創(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}`);
}
在上面代碼中,我們其實是創(chuàng)建了一個console.Console類的實例,該類需要指定兩個參數(shù),即標(biāo)準(zhǔn)輸出流和標(biāo)準(zhǔn)錯誤輸出流,正常情況下,實際上是對應(yīng)了process.stdout和process.stderr,以上的代碼中,我們將這兩個輸出流改為了文件輸出流,并指定為文件追加模式,這樣即可將日志信息輸出到指定的文件中去。運行上面的代碼,會生成stdout.log和stderr.log兩個文件。
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 ...
看上去信息還比較簡單,不像是日志文件的樣子,我們或許得為每條日志添加一個時間才行,下面先為Date對象添加一個format的原型方法:
// 添加format方法
Date.prototype.format = function (format) {
if (!format) {
format = 'yyyy-MM-dd HH:mm:ss';
}
// 用0補齊指定位數(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), // 時
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];
});
}
然后再改寫前面的主文件:
// 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補齊指定位數(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), // 時
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}`);
}
重新運行程序,然后查看兩個日志文件的內(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 ...
這樣一個簡單的日志輸出就完成了。
參考資料:https://nodejs.org/api/console.html
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Node.js查詢MySQL并返回結(jié)果集給客戶端的全過程
nodejs最大的優(yōu)勢也是大家用著最為難以理解的一點,就是它的異步功能,它幾乎所有的io操作都是異步的,這也就導(dǎo)致很多人不理解也用不習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于Node.js查詢MySQL并返回結(jié)果集給客戶端的相關(guān)資料,需要的朋友可以參考下2022-12-12
使用Node.js創(chuàng)建本地HTTP服務(wù)器并實現(xiàn)異地遠(yuǎn)程訪問的方法
Node.js 是能夠在服務(wù)器端運行 JavaScript 的開放源代碼、跨平臺運行環(huán)境,這篇文章主要介紹了如何使用Node.js快速創(chuàng)建本地HTTP服務(wù)器并實現(xiàn)異地遠(yuǎn)程訪問,需要的朋友可以參考下2024-01-01
node+axios實現(xiàn)下載外網(wǎng)文件到本地
這篇文章主要為大家介紹了node+axios實現(xiàn)下載外網(wǎng)文件到本地示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

