大家好,欢迎来到IT知识分享网。
目录
一、log4js简介
log4js是node日志管理工具,可以将项目中的一些输出内容更优雅地储存起来。由于node.js是后端项目,console.log()仅仅只能在控制台输出。所以当我们项目部署到服务器上时,日志管理工具显得尤为重要,log4js可以第一时间让我们获取到项目实时日志信息。
二、log4js使用[图片]
1.安装
npm install log4js
2.导入
const log4js = require('log4js')
3.配置
log4js主要配置 appenders 和 categories ,后面会详细介绍。
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: , 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,此处使用自定义模式 pattern layout: { 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的类型。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109928.html
