winstonnode日志库,地址npminstallwinston。1.基本上使用constwinston=require('winston')//配置日志系统constlogger=winston.createLogger({//当输出日志级别小于设置值时输出,"info,erro,verbose"和otherlevels:'info',//日志级别定义,默认为内置级别设置levels:winston.config.npm.levels,//格式化输出信息format:winston.format.json,//在哪里输出日志信息,比如对于一个文件或者命令行,默认的[]transports:[newwinston.transports.Console(),newwinston.transports.File({filename:'combined.log'})],//异常是否会导致进程.exit,设置为false不会exitOnError:true,//为true时不会输出所有日志silent:false})//日志输出logger.error('Helloagaindistributed日志');2.levels日志级别默认日志级别//winston.config.npm.level{error:0,warn:1,info:2,verbose:3,debug:4,silly:5}自定义日志级别constmyCustomLevels={levels:{foo:0,bar:1,baz:2,foobar:3},colors:{foo:'blue',bar:'green',baz:'yellow',foobar:'red'}};constlogger=winston.createLogger({级别:myCustomLevels.levels});logger.foobar('somefoobarlevel-edmessage');3.formatFormat模块的输入是一个对象,参数名为infoconstinfo={level:'info',message:'hey,logsomething',meta:{}//其他参数}format过程就是改造上述对象生成新的信息对象的过程。按如下方式自定义转换:constvolume=format((info,opts)=>{if(opts.yell){info.message=info.message.toUpperCase();}elseif(opts.whisper){info.message=info.message.toLowerCase();}returninfo;//returnfalse会过滤掉信息});当要应用多个transform时,需要使用format.combine函数来组合多个transform,有点类似于函数式编程中的compose。const{combine,timestamp,label}=格式;constlabelTimestamp=combine(label({label:'对喵!'}),timestamp());常用transformColorizecolorize({//各种log颜色colors:{info:'blue',error:'red'},//颜色应用范围level:true,all:false,message:true})Printf自定义输出constmyFormat=printf(({level,message,label,timestamp})=>{return`${timestamp}[${label}]${level}:${message}`})时间戳添加时间戳format.timestamp();[更多](https://github.com/winstonjs/logform)4.传输输出以添加多个传输constlogger=winston.createLogger({transports:[newwinston.transports.Console(),newwinston.transports.File({filename:'combined.log',level:'info'//该级别以下的日志输出}),newwinston.transports.File({filename:'errors.log',level:'error'})]});去掉之前的transportconstcombinedLogs=logger.transports.find(transport=>{returntransport.filename==='combined.log'});logger.remove(组合日志);从定义transportconstTransport=require('winston-transport');constutil=require('util');////从`winston-transport`继承,因此您可以//利用基本功能和`.exceptions。handle()`.//module.exports=classYourCustomTransportextendsTransport{constructor(opts){super(opts);////在这里使用任何自定义选项。例如://-数据库的连接信息//-API的身份验证信息(例如loggly、papertrail、//logentries等)。//}log(info,callback){setImmediate(()=>{this.emit('logged',info);});//执行对远程服务的写入callback();}};
