Node.js学习笔记(九)#log4js日志管理
目錄
一、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日志管理工具,可以將項目中的一些輸出內(nèi)容更優(yōu)雅地儲存起來。由于node.js是后端項目,console.log()僅僅只能在控制臺輸出。所以當我們項目部署到服務器上時,日志管理工具顯得尤為重要,log4js可以第一時間讓我們獲取到項目實時日志信息。
二、log4js使用[圖片]
1.安裝
npm install log4js2.導入
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.添加實例
實例中傳的參數(shù)對應 categories 中的屬性名,如果找不到或者沒傳,則默認使用 default
const logger = log4js.getLogger("normal")5.輸出日志
logger.info("我是信息日志") logger.error("我是錯誤日志")三、log4js日志等級
日志等級從低到高分為6個等級
trace - 最低等級
debug
info
warn
error
fatal - 最高等級
我們在categories中設置level時,會將設置的級別以下的日志內(nèi)容過濾,不予展示。
四、log4js配置信息
1.appenders 輸出源
appenders 輸出源是一個對象類型,他可以包含多個輸出源,并在 categories 類別中導出。格式如下:其中 type 是必填的,根據(jù)不同的 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輸出到控制臺。
但是大量輸出寫入控制臺會占用大量內(nèi)存,避免此問題可以將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 - 設置日志最大大小(以字節(jié)為單位),若不設置或為0則不會發(fā)生日志滾動??梢越邮艽笮『缶Y為K, M, G的字符串,例如1K, 1M, 1G
- backups - 在日志滾動期間要保留的舊日志文件的數(shù)量,默認為5
- layout - 布局,默認basic layout
- encoding - 編碼格式,默認“utf-8”
- mode - 文件模式,默認0o600
- flags - 標識符,默認為‘a(chǎn)’
- compress - 是否壓縮,如果為true則生成.gz后綴的日志壓縮文件,默認為false
- keepFileExt - 滾動日志文件時保留文件擴展名,默認為false
- fileNameSep - 滾動時的文件名分隔符,默認為‘.’
⑤ type - datefile
根據(jù)日期生成日志文件。
它提供了如下屬性:
- filename - 文件寫入路徑
- pattern - 日志文件切割模式,默認為yyyy-MM-dd,按日期(天)切割
- layout - 布局,默認basic layout
- encoding - 編碼格式,默認“utf-8”
- mode - 文件模式,默認0o600
- flags - 標識符,默認為‘a(chǎn)’
- compress - 是否壓縮,如果為true則生成.gz后綴的日志壓縮文件,默認為false
- keepFileExt - 滾動日志文件時保留文件擴展名,默認為false
- fileNameSep - 滾動時的文件名分隔符,默認為‘.’
- alwaysIncludePattern - 輸出的日志文件名是都始終包含pattern日期結(jié)尾,默認為false
- numBackups - 在日志匹配pattern期間要保留的舊日志文件的數(shù)量,默認為1
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")?輸出結(jié)果:
[2022-12-13T14:23:39.917] [INFO] default - express is running at http://127.0.0.1:8080② type - colored
帶有彩色塊的日志布局。日志顏色根據(jù)不同等級格式如下:
- TRACE - ‘blue’
- DEBUG - ‘cyan’
- INFO - ‘green’
- WARN - ‘yellow’
- ERROR - ‘red’
- FATAL - ‘magenta’
輸出結(jié)果:
[32m[2022-12-13T14:23:59.045] [INFO] default - [39mexpress is running at http://127.0.0.1:8080③ type - messagePassThrough
只輸出日志數(shù)據(jù),不輸出時間戳、級別或類別。
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")?輸出結(jié)果:
express is running at http://127.0.0.1:8080④ type - dummy
僅輸出日志數(shù)據(jù)第一個值。
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)?輸出結(jié)果:
服務器啟動啦:⑤ type - pattern
自定義日志輸出格式。
pattern字符串可以包含任何字符,但以%開頭的序列將替換為如下內(nèi)容:
- %r 當?shù)貢r間
- %p 日志等級level
- %c日志類別category
- %h hostname
- %m 日志內(nèi)容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 調(diào)用堆棧,需要category設置enableCallStack: true
- %C 類名,需要category設置enableCallStack: true
- %M 方法或函數(shù)名,需要category設置enableCallStack: true
- %A 方法或函數(shù)別名,需要category設置enableCallStack: true
- %F 全限定調(diào)用名,需要category設置enableCallStack: true
- %x{} 將token添加到日志中
- %X{} add values from the Logger context. Tokens are keys into the context values.
- %[開始一個彩色塊
- %] 結(jié)束一個彩色塊
輸出結(jié)果:
[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格式數(shù)據(jù):
pattern:'{"date":"%d","level":"%p","category":"%c","host":"%h","pid":"%z","data":"%m"}'輸出結(jié)果:
{"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 類別是日志事件的組。當創(chuàng)建實例log4js.getLogger('定義的categories')時,會定義日志事件的類別。具有相同類別的日志事件將轉(zhuǎn)到相同的輸出源。
categories定義了輸出源以及最低展示級別。categories有default默認類別,以及自定義的類別。我們可以根據(jù)需要來配置數(shù)據(jù)源以及創(chuàng)建實例.若創(chuàng)建實例時log4js.getLogger()的參數(shù)未定義或者未找到,則默認類別為 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輸出源。可以根據(jù)需要定義輸出源cheese和app的類型。
總結(jié)
以上是生活随笔為你收集整理的Node.js学习笔记(九)#log4js日志管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CV5200远距离WiFi模组,安防监控
- 下一篇: 从 MIT 协议谈契约精神