Node.js利用console输出日志文件的方法示例
通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单介绍一下。
我们首先创建如下文件:
//index.js letfs=require('fs'); letoptions={ flags:'a',//append模式 encoding:'utf8',//utf8编码 }; letstdout=fs.createWriteStream('./stdout.log',options); letstderr=fs.createWriteStream('./stderr.log',options); //创建logger letlogger=newconsole.Console(stdout,stderr); for(leti=0;i<100;i++){ logger.log(`logmessage${i}`); logger.error(`errmessage${i}`); }
在上面代码中,我们其实是创建了一个console.Console类的实例,该类需要指定两个参数,即标准输出流和标准错误输出流,正常情况下,实际上是对应了process.stdout和process.stderr,以上的代码中,我们将这两个输出流改为了文件输出流,并指定为文件追加模式,这样即可将日志信息输出到指定的文件中去。运行上面的代码,会生成stdout.log和stderr.log两个文件。
stdout.log文件内容如下:
logmessage0 logmessage1 logmessage2 logmessage3 logmessage4 logmessage5 logmessage6 logmessage7 logmessage8 logmessage9 logmessage10 ...
stderr.log文件内容如下:
errmessage0 errmessage1 errmessage2 errmessage3 errmessage4 errmessage5 errmessage6 errmessage7 errmessage8 errmessage9 errmessage10 ...
看上去信息还比较简单,不像是日志文件的样子,我们或许得为每条日志添加一个时间才行,下面先为Date对象添加一个format的原型方法:
//添加format方法 Date.prototype.format=function(format){ if(!format){ format='yyyy-MM-ddHH:mm:ss'; } //用0补齐指定位数 letpadNum=function(value,digits){ returnArray(digits-value.toString().length+1).join('0')+value; }; //指定格式字符 letcfg={ 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),//毫秒 }; returnformat.replace(/([a-z]|[A-Z])(\1)*/ig,function(m){ returncfg[m]; }); }
然后再改写前面的主文件:
//index.js letfs=require('fs'); letoptions={ flags:'a',//append模式 encoding:'utf8',//utf8编码 }; letstdout=fs.createWriteStream('./stdout.log',options); letstderr=fs.createWriteStream('./stderr.log',options); //创建logger letlogger=newconsole.Console(stdout,stderr); //添加format方法 Date.prototype.format=function(format){ if(!format){ format='yyyy-MM-ddHH:mm:ss'; } //用0补齐指定位数 letpadNum=function(value,digits){ returnArray(digits-value.toString().length+1).join('0')+value; }; //指定格式字符 letcfg={ 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),//毫秒 }; returnformat.replace(/([a-z]|[A-Z])(\1)*/ig,function(m){ returncfg[m]; }); } for(leti=0;i<100;i++){ lettime=newDate().format('yyyy-MM-ddHH:mm:ss.fff'); logger.log(`[${time}]-logmessage${i}`); logger.error(`[${time}]-errmessage${i}`); }
重新运行程序,然后查看两个日志文件的内容。
stdout.log内容如下:
[2018-04-2707:30:54.309]-logmessage0 [2018-04-2707:30:54.312]-logmessage1 [2018-04-2707:30:54.312]-logmessage2 [2018-04-2707:30:54.312]-logmessage3 [2018-04-2707:30:54.312]-logmessage4 [2018-04-2707:30:54.312]-logmessage5 [2018-04-2707:30:54.312]-logmessage6 [2018-04-2707:30:54.312]-logmessage7 [2018-04-2707:30:54.312]-logmessage8 [2018-04-2707:30:54.312]-logmessage9 [2018-04-2707:30:54.312]-logmessage10 ...
stderr.log内容如下:
[2018-04-2707:30:54.309]-errmessage0 [2018-04-2707:30:54.312]-errmessage1 [2018-04-2707:30:54.312]-errmessage2 [2018-04-2707:30:54.312]-errmessage3 [2018-04-2707:30:54.312]-errmessage4 [2018-04-2707:30:54.312]-errmessage5 [2018-04-2707:30:54.312]-errmessage6 [2018-04-2707:30:54.312]-errmessage7 [2018-04-2707:30:54.312]-errmessage8 [2018-04-2707:30:54.312]-errmessage9 [2018-04-2707:30:54.312]-errmessage10 ...
这样一个简单的日志输出就完成了。
参考资料:https://nodejs.org/api/console.html
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。