nodejs log4js 使用详解


Posted in NodeJs onMay 31, 2019

本文章针对 log4js v4.3

本文对自己用log4js的技术点简单的做一个记录,有一些技术点没有用到或者写全,会在后面用到的时候进行更新。

先大概的对log4js 的基本用法做一个总结,使用configure()方法对日志输出进行配置,使用 getlogger()方法获取logger对象,然后使用logger 对象进行打印各个级别的日志。其中比较复杂的是 configure()方法中的配置对象appenders 和 categories 下面重点讲解这两个对象

安装

npm install --save log4js

日志级别level

log4js的分为以下几个级别,级别的顺序也是按如下排列,logger只会打印大于等于logger对象设置的level的日志。

  • trace
  • debug
  • info
  • warn
  • error
  • fatal

简单的用法

var log4js = require('log4js');
var logger = log4js.getLogger();
logger.level = 'debug';
logger.debug("Some debug messages");

getLogger()方法返回一个logger对象,想对日志进行记录就必须使用logger对象,将logger对象的 level设置为debug(默认为OFF不会输出任何日志)

在node 环境运行上面的代码之后发现在控制台打印出了对应的日志信息,但是这跟我想要的完全不一样,我想要的是根据我自己的想法将日志进行分类方便查找和统计。接下来我们就看如何对日志进行分类。

configure(string | object) 方法

通过调用configure 方法就可以实现我们对日志进行分类管理的目的。方法的参数可以是一个字符串或者是一个object 字符串参数被视为用于加载配置的文件名,配置文件是一个json 文件,也可以直接将配置对象传给configure。

配置对象

本次只对配置对象中最常用的appenders 和categories 进行介绍,还有部分属性暂时还没有用到等用到的时候在进行补充,如果平常用的话这两个属性应该就够了。

简单的总结一下这两个属性,先有一个概念性的认识了解一下他们分别是干什么的。

appenders 主要是用来定义以怎样的方式输出,输出到哪里(主要功能不仅限于)

categories 是用来定义日志输出的规则然后调用之前定义好的 appenders 进行输出

写一个简单的例子方便理解一下

const log4js = require('log4js');
log4js.configure({
 appenders: {
  out: { type: 'stdout' },
  app: { type: 'file', filename: 'application.log' }
 },
 categories: {
  default: { appenders: [ 'out', 'app' ], level: 'debug' }
 }
});

var logger = log4js.getLogger();
logger.debug("Some debug messages");

运行上的代码将会创建application.log 文件在项目目录下,同时会把日志打到控制台和 application.log文件中.
上面定义了两个appender 一个是输出到 stdout 一个是输出到 file ,可以看出appender主要使用来定义输出位置的
同时在categories 中定义了一个规则,调用了appender中定义的输出,并且输出级别为 debug

appenders

appenders 的是一个map, key 代表的是appender的名字是一个字符串,value里面有一个必选的属性是type,根据type 的不同value 的格式也不一样,下面我们说几种常用的 type

file

file 日志将会输出到指定的文件中。

例子

log4js.configure({
 appenders: {
  everything: { type: 'file', filename: 'all-the-logs.log' }
 },
 categories: {
  default: { appenders: [ 'everything' ], level: 'debug' }
 }
});

const logger = log4js.getLogger();
logger.debug('I will be logged in all-the-logs.log');

常用配置属性

1. type:'file'
2. filename string 输出文件的名字
3. maxLogSize integer日志文件的最大大小(以字节为单位)。如果未指定,则不会发生日志滚动。
4. backups日志滚动期间要保留的旧日志文件数默认为5
5. layout 默认是basic layout
6. keepFileExt boolean  默认为false 滚动日志文件时保留文件扩展名(file.log变为file.1.log而不是file.log.1)
7. compress 对滚动的日志文件进行压缩

dateFile

dateFile 日志的滚动将根据配置的时间格式进行滚动而不是文件大小

例子

log4js.configure({
 appenders: {
  everything: { type: 'dateFile', filename: 'all-the-logs.log' }
 },
 categories: {
  default: { appenders: [ 'everything' ], level: 'debug' }
 }
});

常用配置属性

1. type:'dateFile'
2. filename string 输出文件的名字
3. pattern(默认为.yyyy-MM-dd) - 用于确定何时滚动日志的模式。
4. layout 默认是basic layout
5. daysToKeep integer(默认为0) - 如果此值大于零,则在日志滚动期间将删除早于该天数的文件。
6. keepFileExt (默认为false) - 在滚动日志文件时保留文件扩展名(file.log变为file.2017-05-30.log而不是file.log.2017-05-30
7. compress 对滚动的日志文件进行压缩

categories

categories 也是一个map类型的数据,key是 category 的名字是一个字符串,value 是一个对象。

value 的常用属性

  1. level 定义打印日志的级别
  2. appenders 定义打印的appender

getLogger([category]) 方法

getLogger 方法返回的是一个logger 对象,logger对象用来打印各个级别的日志。

getlogger 方法有一个可选参数category的名字,不写的情况会使用 categories 中default 定义的规则进行打印,填写之后会根据对应的 category定义的规则进行打印日志。

参考文档 api

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
使用forever管理nodejs应用教程
Jun 03 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
Nodejs让异步变成同步的方法
Mar 02 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 NodeJs
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
May 30 #NodeJs
nodejs中实现修改用户路由功能
May 24 #NodeJs
nodejs实现用户登录路由功能
May 22 #NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 #NodeJs
nodejs中实现用户注册路由功能
May 20 #NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 #NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 #NodeJs
You might like
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
smarty实现多级分类的方法
2014/12/05 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
python求crc32值的方法
2014/10/05 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
django自定义模板标签过程解析
2019/12/14 Python
Python中base64与xml取值结合问题
2019/12/22 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
创业融资计划书
2014/04/25 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
应聘教师自荐书
2014/06/16 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
授权委托书格式范文
2014/08/02 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis