手机版

Node.js日志处理模块log4js

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

Log4js是Node.js日志处理中最好的模块之一。与控制台或TJ调试相比,有其优势,特别是对于投入生产的Node.js项目,以下几点是不可或缺的:

日志分级、日志分类、日志丢弃,本文会给大家全面介绍log4js,让大家在项目中轻松使用log4js,易于开发和调试,可以更好地在线监控或排查问题。

只发挥一小部分才能

以下三行代码向您展示了log4js的最简单用法:

//file : simple . jsvar log4js=require(' log4js ');var logger=log4js . GetLogger();logger . debug(' times : ',new Date());你可以打电话。getLogger()获取log4js的Logger实例,其使用方式与console相同,可以调用。调试(也有。信息,错误和其他方法)来输出日志。

运行nodesimplify.js,输出如下:

$ node simple . js[2016-08-21 003:01:24.852][DEBUG][default]-time : 2016-08-20t 16:01336024.852 z time 3360 2016-08-20t 163:0013360024.8522 z是我们要输出的内容,前一个包含

好用吗?好吧,在我们深入研究log4js的高级用法之前,让我们熟悉一下log4js中的一些概念。

水平

这个不难理解,就是原木的分类。只有对日志进行分级,log4js才能更好地向我们展示日志(不同级别的日志在控制台中使用不同的颜色,例如,error通常为红色),并且可以在生产中有选择地丢弃日志,例如,避免一些属于的敏感信息。防止调试信息泄露。

Log4js日志分为九个级别,每个级别的名称和权重如下:

{ ALL:新级别(编号。MIN_VALUE,' ALL '),TRACE:新等级(5000,' TRACE '),DEBUG:新等级(10000,' DEBUG '),INFO:新等级(20000,' INFO '),WARN:新等级(30000,' WARN '),ERROR:新等级(40000,' ERROR '),salary :新等级(50000,'致命'),Mark :新等级(90000)max _ value,' off')}上图:

“全部关闭”不直接用于业务代码。其余七个方法对应于Logger实例。追踪。调试。信息.也就是说,当你调用这些方法时,相当于对这些日志进行评级。因此[2016-08-21 00:01336024.852][DEBUG][default]-time : 2016-08-20t 16336001336024.852 z中的前一个DEBUG并不是这个日志的唯一级别。

类型

log4js的另一个概念是category(类型)。您可以设置记录器实例的类型,并根据另一个维度区分日志:

//file : set-cate tory . jsvar log4js=require(' log4js ');var logger=log4js.getLogger('示例');logger . debug(' times : ',new Date());通过getLogger获取Logger实例时,唯一可以传递的参数是LoggerCategory(如‘example’),该参数指定Logger实例属于哪个类别。这和TJ的调试是一样的:

var debug=require(' debug ')(' worker ');setInterval(function(){ debug('做一些工作'));}, 1000);在调试中,“worker”也会对日志进行分类。好了,回来运行节点集-cattory . js:

[2016-08-21 01:16:00.212][debug]示例-时间: 2016-08-20t 1733601633600.212 z与之前的[2016-08-21 00:04]相同:0005-时间: 2016-8月20日16:]

类别有什么用?它比级别更灵活,并为日志提供了第二个维度。例如,您可以为每个文件设置不同的类别,例如,在set-cattory . js:

//file : set-cate tory . jsvar log4js=require(' log4js ');var logger=log4js . Getlogger(' set-cattory . js ');logger . debug(' times : ',new Date());从日志[2016-08-21 013:24:07.332][debug]set-cattory . js-time : 2016-08-20t 17:24336007.331 z可以看出,这个日志来自文件set-cattory . js,或者对不同的节点包使用不同的类别,从而区分日志来自哪个模块。

追加器

好了,现在原木有了等级和类别,入口的原木分级分类问题就解决了。在log4js中,日志的退出问题(即日志在哪里输出)由Appender解决。

默认追加程序

以下是log4js中的默认附加器设置:

//log4js . jsdefaultconfig={ appenders 3360[{ type : ' console ' }]}可以看到,在没有配置log4js的情况下,默认会将日志输出到控制台。

设置自己的追加器

我们可以通过log4js.configure设置我们想要的附加程序

//file : custom-appender . jsvar log4js=require(' log4js ');log4js . configure({ appenders :[{ type : ' file ',filename : ' default . log ' }]})var logger=log4js . getlogger(' custom-appender ');logger . debug(' times : ',new Date());在上面的例子中,我们将日志输出到一个文件并运行代码。log4js在当前目录中创建了一个名为default.log的文件,[2016-08-21 08:43:21.272][debug]custom-appender-time 3360 2016-08-21t 00:40

log4js提供的追加器

控制台和文件是log4js提供的附加程序,此外:

DateFile:将日志输出到一个文件中,日志文件可以在特定的日期模式下滚动,例如输出到default-2016-08-21.log today和default-2016-08-22 . log today;SMTP:将日志输出到邮件;Mailgun:通过Mailgun API将日志输出到mail gun;级别筛选器可以按级别进行筛选;等待其他附录。你可以在这里看到所有的列表。

过滤级别和类别

我们可以调整appender的配置,过滤日志的级别和类别:

//file : level-and-category . jsvar log4js=require(' log4js ');log4js . configure({ appenders :[{ type : ' LogLevelFilter '、level: 'DEBUG '、category: 'category1 '、appender: { type: 'file '、filename : ' default . log ' } })} var logger 1=log4js . getlogger(' category 1 ');var logger 2=log4js . GetLogger(' categor 2 ');logger 1 . debug(' times : ',new Date());logger 1 . trace(' times : ',new Date());logger 2 . debug(' times : ',new Date());运行,在默认值中添加日志。日志:

[2016-08-21 103:08:21.630][调试]类别1-时间: 2016-08-21t 02:08336021.629 z看代码:

使用logLevelFilter和level筛选日志级别,将输出所有权大于或等于DEBUG的日志。这也是前面提到的对数级权重的含义;选择要按类别输出的日志类别,类别2下的日志将被过滤掉。此配置还接受一个数组,如['category1 ',' category2'],这样两个类别的日志都会输出到文件中。

布局

Layout是log4js提供的高级功能,通过它我们可以自定义每个输出日志的格式。Log4js内置了四种格式:

MessagePassThrough:只输出日志的内容;基本:日志内容前会添加时间、日志级别、类别,通常是默认布局;日志的;有色/彩色:在基本的基础上给原木增加颜色,还有这个布局;默认情况下由附加控制台使用;模式:这是一种特殊的类型,可以用来定义任何你想要的格式。一个模式的例子:

//file : layout-pattern . jsvar log4js=require(' log4js ');log4js . configure({ appenders :[{ type : ' console '、layout: { type: 'pattern '、pattern n : '[% r][%[% 5.5p %]-% m % n ' } }])})var logger=log4js . getlogger(' layout-pattern ');logger . debug(' times : ',new Date());%r %p $m $n是log4js的内置包含描述符,可以用来输出一些元信息。有关更多详细信息,请参考log4js文档。

一张图片说明了记录器、附加器和布局的位置。

实战:输出Node应用的ACCESS日志access.log

为了方便地检查问题,应用程序请求进出的日志通常记录在生产环境中。然后如何使用log4js,直接代码:

//file : server . jsvar log4js=require(' log4js ');var express=require(' express ');log4js . configure({ appenders :[{ type : ' DateFile ',filename: 'access.log ',pattern: '-yyyy-MM-dd.log ',alwaysIncludePattern: true,category : ' access ' }]});var app=express();app . use(log 4js . connect logger(log 4js . GetLogger(' access '),{ level : log 4js . levels . INFO });APP.get ('/'),function (req,res) {res.send('前端外文期刊评论');});app . listen(5000);看看我们做了什么:

配置附加器,从日志中选择具有访问类别的日志,输出到滚动文件;Log4js.getLogger('access ')获取access的Logger实例,并将其传递给log4js.connectLogger中间件,后者收集访问信息并通过这个实例打印出来。启动服务器,访问http://localhost:5000,会发现目录中有一个名为access.log-2016-08-21.log的文件,里面有两个日志:

[2016-08-21 14:34:04.752][INFO]access-:1--' GET/HTTP/1.1 ' 200 18 ' ' ' Mozilla/5.0(Macintosh;英特尔Mac OS X 10 _ 11 _ 0)applebwebkit/537.36(KHTML,像Gecko)Chrome/52 . 0 . 2743 . 116 Safari/537.36 '[2016-08-21 14:34336005.002][INFO]access-:1--' GET/fav icon . ico HTTP/1.1 ' 404 24 '

通过log4js日志的分类和appender函数,我们将访问日志输出到一个滚动更新的文件中。

摘要

本文全面介绍了log4js的用法。与控制台或简单的日志工具相比,log4js使用起来更复杂,当然,它更强大,更适合生产级应用。如果你感兴趣,请留言告诉外国杂志。接下来,我们将介绍如何在Node应用程序中进行配置管理。

版权声明:Node.js日志处理模块log4js是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。