目录

一、log4js简介

二、log4js使用[图片]

1.安装

2.导入

3.配置

4.添加实例

5.输出日志

三、log4js日志等级

四、log4js配置信息

1.appenders 输出源

① type - console

② type - stdout

③ type - stderr

④ type - file

⑤ type - datefile

2.layout 布局

① type - basic

② type - colored

③ type - messagePassThrough

④ type - dummy

⑤ type - pattern

3.categories 类别


一、log4js简介

log4js是node日志管理工具,可以将项目中的一些输出内容更优雅地储存起来。由于node.js是后端项目,console.log()仅仅只能在控制台输出。所以当我们项目部署到服务器上时,日志管理工具显得尤为重要,log4js可以第一时间让我们获取到项目实时日志信息。

二、log4js使用[图片]

1.安装

npm install log4js

2.导入

const log4js = require('log4js')

3.配置

log4js主要配置 appenderscategories ,后面会详细介绍。

log4js.configure({appenders: { // 输出源out: { type: "stdout" },app: { type: "file", filename: "application.log" },err: { type: 'stderr' }},categories: { // 类别default: { appenders: ["out", "app"], level: "debug" },normal: { appenders: ["out", "app"], level: "info" },err: { appenders: ["err"], level: "error" }},
})

4.添加实例

实例中传的参数对应 categories 中的属性名,如果找不到或者没传,则默认使用 default

const logger = log4js.getLogger("normal")

5.输出日志

logger.info("我是信息日志")
logger.error("我是错误日志")

三、log4js日志等级

日志等级从低到高分为6个等级

trace - 最低等级

debug

info

warn

error

fatal - 最高等级

我们在categories中设置level时,会将设置的级别以下的日志内容过滤,不予展示。

四、log4js配置信息

1.appenders 输出源

appenders 输出源是一个对象类型,他可以包含多个输出源,并在 categories 类别中导出。格式如下:其中 type 是必填的,根据不同的 type 类型,有附加的其他属性。

log4js.configure({appenders: { // 输出源key1: { type: "value1" },key2: { type: "value2" },key3: { type: "value3", …… },……}categories: { default: { appenders: ["key1","key2","key3",……], level: "info" } }
})

appenders常用的输出源有如下几种:

① type - console

将log输出到控制台

但是大量输出写入控制台会占用大量内存,避免此问题可以将type设置为stdout。

log4js.configure({appenders: { console: { type: "console" } },categories: { default: { appenders: ["console"], level: "info" } }
})

② type - stdout

将log写入标准输出流

默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。

log4js.configure({appenders: { out: { type: "stdout" } },categories: { default: { appenders: ["out"], level: "info" } }
})

③ type - stderr

将log写入标准错误流

一般情况下,stderr用于输出错误日志,需要将level设置为error。

log4js.configure({appenders: { err: { type: "stderr" } },categories: { default: { appenders: ["err"], level: "error" } }
})

④ type - file

将log写入文件中。

它提供了如下属性:

  • filename - 文件写入路径
  • maxLogSize - 设置日志最大大小(以字节为单位),若不设置或为0则不会发生日志滚动。可以接受大小后缀为K, M, G的字符串,例如1K, 1M, 1G
  • backups - 在日志滚动期间要保留的旧日志文件的数量,默认为5
  • layout - 布局,默认basic layout
  • encoding - 编码格式,默认“utf-8”
  • mode - 文件模式,默认0o600
  • flags - 标识符,默认为‘a’
  • compress - 是否压缩,如果为true则生成.gz后缀的日志压缩文件,默认为false
  • keepFileExt - 滚动日志文件时保留文件扩展名,默认为false
  • fileNameSep - 滚动时的文件名分隔符,默认为‘.’
log4js.configure({appenders: {everything: {type: "file",filename: "all-the-logs.log",maxLogSize: 10485760,backups: 3,encoding: "utf-8",compress: true,},},categories: {default: { appenders: ["everything"], level: "debug" },}
})

⑤ type - datefile

根据日期生成日志文件。

它提供了如下属性:

  • filename - 文件写入路径
  • pattern - 日志文件切割模式,默认为yyyy-MM-dd,按日期(天)切割
  • layout - 布局,默认basic layout
  • encoding - 编码格式,默认“utf-8”
  • mode - 文件模式,默认0o600
  • flags - 标识符,默认为‘a’
  • compress - 是否压缩,如果为true则生成.gz后缀的日志压缩文件,默认为false
  • keepFileExt - 滚动日志文件时保留文件扩展名,默认为false
  • fileNameSep - 滚动时的文件名分隔符,默认为‘.’
  • alwaysIncludePattern - 输出的日志文件名是都始终包含pattern日期结尾,默认为false
  • numBackups - 在日志匹配pattern期间要保留的旧日志文件的数量,默认为1
log4js.configure({appenders: {everything: {type: "dateFile",filename: "all-the-logs.log",pattern: "yyyy-MM-dd-hh",encoding: "utf-8",compress: true,keepFileExt: true,alwaysIncludePattern: true},},categories: {default: { appenders: ["everything"], level: "debug" },}
})

2.layout 布局

① type - basic

最基本的日志布局。如stdout,默认为colored布局,则会被替换成basic布局。

log4js.configure({appenders: { out: { type: "stdout", layout: { type: "basic" } } },categories: { default: { appenders: ["out"], level: "info" } }
})
const logger = log4js.getLogger()
logger.info("express is running at http://127.0.0.1:8080")

输出结果:

[2022-12-13T14:23:39.917] [INFO] default - express is running at http://127.0.0.1:8080

② type - colored

带有彩色块的日志布局。日志颜色根据不同等级格式如下:

  • TRACE - ‘blue’
  • DEBUG - ‘cyan’
  • INFO - ‘green’
  • WARN - ‘yellow’
  • ERROR - ‘red’
  • FATAL - ‘magenta’
log4js.configure({appenders: { out: { type: "file", filename: 'log.log', layout: { type: "colored" } } },categories: { default: { appenders: ["out"], level: "info" } }
})
const logger = log4js.getLogger()
logger.info("express is running at http://127.0.0.1:8080")

输出结果:

[32m[2022-12-13T14:23:59.045] [INFO] default - [39mexpress is running at http://127.0.0.1:8080

③ type - messagePassThrough

只输出日志数据,不输出时间戳、级别或类别。

log4js.configure({appenders: { out: { type: "file", filename: 'log.log', layout: { type: "messagePassThrough" } } },categories: { default: { appenders: ["out"], level: "info" } }
})
const logger = log4js.getLogger()
logger.info("express is running at http://127.0.0.1:8080")

输出结果:

express is running at http://127.0.0.1:8080

④ type - dummy

仅输出日志数据第一个值。

log4js.configure({appenders: { out: { type: "file", filename: 'log.log', layout: { type: "dummy" } } },categories: { default: { appenders: ["out"], level: "info" } }
})
const logger = log4js.getLogger()
const address = " http://127.0.0.1:8085"
logger.info("服务器启动啦:",address)

输出结果:

服务器启动啦:

⑤ type - pattern

自定义日志输出格式。

pattern字符串可以包含任何字符,但以%开头的序列将替换为如下内容:

  • %r 当地时间
  • %p 日志等级level
  • %c日志类别category
  • %h hostname
  • %m 日志内容data
  • %m{l} where l is an integer, log data.slice(l)
  • %m{l,u} where l and u are integers, log data.slice(l, u)
  • %d 日期时间,也可以格式化,如%d{DATETIME}, %d{yyyy/MM/dd-hh.mm.ss}
  • %% 可以输出%
  • %n 换行
  • %z pid
  • %f 文件全路径
  • %f{depth} 路径深度,如%f{1}
  • %l 行号 line number
  • %o 列位置,需要category设置enableCallStack: true
  • %s 调用堆栈,需要category设置enableCallStack: true
  • %C 类名,需要category设置enableCallStack: true
  • %M 方法或函数名,需要category设置enableCallStack: true
  • %A 方法或函数别名,需要category设置enableCallStack: true
  • %F 全限定调用名,需要category设置enableCallStack: true
  • %x{} 将token添加到日志中
  • %X{} add values from the Logger context. Tokens are keys into the context values.
  • %[开始一个彩色块
  • %] 结束一个彩色块
log4js.configure({appenders: {cheese: {type: 'dateFile',filename: 'log.log',encoding: 'utf-8',// 配置 layout,此处使用自定义模式 patternlayout: {type: "coloured",// type: "pattern"// 配置模式// pattern:"[date:%d] [level:%p] [category:%c] [host:%h] [pid:%z] [data:%m]"},pattern: "-yyyy-MM-dd",keepFileExt: true,alwaysIncludePattern: true}},categories: {default: { appenders: ['cheese'], level: "trace" }}
})

输出结果:

[date:2022-12-13T13:54:06.412] [level:INFO] [category:default] [host:shenqihailuo] [pid:12345] [data:express is running at http://127.0.0.1:8080]

也可以定义为json格式数据:

pattern:'{"date":"%d","level":"%p","category":"%c","host":"%h","pid":"%z","data":"%m"}'

输出结果:

{"date":"2022-12-15T10:00:03.081","level":"INFO","category":"default","host":"shenqihailuo","pid":"12345","data":"express is running at http://127.0.0.1:8080"}

3.categories 类别

categories 类别是日志事件的组。当创建实例log4js.getLogger('定义的categories')时,会定义日志事件的类别。具有相同类别的日志事件将转到相同的输出源。

categories定义了输出源以及最低展示级别。categories有default默认类别,以及自定义的类别。我们可以根据需要来配置数据源以及创建实例.若创建实例时log4js.getLogger()的参数未定义或者未找到,则默认类别为 default 。

categories: {default: { appenders: ['cheese','app'], level: "trace" },catA: { appenders: ['cheese'], level: "info" },catB: { appenders: ['app'], level: "trace" }
}const catAlogger = log4js.getLogger("catA")
const catBlogger = log4js.getLogger("catA")catAlogger.info("我是catA类别日志")
catBlogger.trace("我是catB类别日志")

catAlogger只会输出cheese输出源,catBlogger只会输出app输出源。可以根据需要定义输出源cheese和app的类型。

Node.js学习笔记(九)#log4js日志管理相关推荐

  1. 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)

    唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...

  2. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  3. 千锋Node.js学习笔记

    千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...

  4. node.js学习笔记

    # node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...

  5. node.js学习笔记14—微型社交网站

    node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...

  6. Node.js学习笔记8

    Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...

  7. node.js 学习笔记(二)模板引擎和C/S渲染

    node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...

  8. node.js学习笔记(21) express日志

    创建一个新的express项目,然后运行: mkdir study21 cd study21 express log-morgan cd log-morgan npm install npm star ...

  9. Vue.js 学习笔记 九 v-if和v-show

    <p v-if="flag">v-if</p><p v-show="flag">v-show</p> flag是 ...

最新文章

  1. ASP.NET页面包含另外一个页面
  2. Python中常用的内置函数(不断更新中)
  3. springcloud、consul和Springboot的版本
  4. [Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效
  5. 6DoF视频:通往下一代高自由度视频体验
  6. 什么是CDI,它与@EJB和Spring有什么关系?
  7. python获取当前文件路径
  8. php 子类重新定义父类的变量_PHP设计模式 ——(抽象工厂模式)
  9. LaTeX技巧005:定制自己炫酷的章节样式实例
  10. 制衣软件测试自学,服装检验作业指导书.doc
  11. 微信云开发实现点赞收藏评论功能
  12. light动名词_动名词与高考考点解析
  13. 数据仓库多维数据模型设计
  14. 华为IT总监离职时给大家写了一封告别信(ZT)
  15. LeetCode-108
  16. java IO流(复习,上课笔记)
  17. 服务器显示桌面计算机,Windows Server 2012/2016桌面显示我的电脑图标
  18. [网络应用]新迅雷会员皮肤开启+去除部分广告方法{推荐}
  19. 一些操作系统安全设置
  20. 微信小程序上传单张或多张图片

热门文章

  1. 音视频行业不可或缺的功能-云端录制
  2. Lenovo g50 如何进入到bios设置?
  3. Java游戏里面的星球大战_星球大战手机游戏-JAVA程序算法
  4. a20 nand更换emmc 版本sdk修改记录
  5. 砾阳软件Rion®-RCMS报表综合管理系统”能做什么
  6. iframe 绕过 微信公众号文章防盗检测
  7. html解析 英文,http请求报文解析(国外英文资料).doc
  8. 超详细Linux下QT使用appimage打包程序
  9. 13.4 库依赖冲突问题:Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path
  10. 使用 Amazon EMR 构建您的数据分析平台