教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

EMQ X有哪些日志級(jí)別?怎樣在運(yùn)行時(shí)修改日志級(jí)別?

更新時(shí)間:2023年10月18日17時(shí)53分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

EMQ X 使用了分層的日志系統(tǒng),在日志級(jí)別上,包括全局日志級(jí)別 (primary log level)、以及各 log hanlder 的日志級(jí)別。

[Primary Level] -- global log level and filters 
       / \ 
[Handler 1] [Handler 2] -- log levels and filters at each handler

log handler 是負(fù)責(zé)日志處理和輸出的工作進(jìn)程,它由 log handler id 唯一標(biāo)識(shí),并負(fù)有如下任務(wù):

接收什么級(jí)別的日志

如何過(guò)濾日志消息

將日志輸出到什么地方

我們來(lái)看一下 emqx 默認(rèn)安裝的 log handlers:

/opt/emqx $ emqx_ctl log handlers list
LogHandler(id=ssl_handler, level=debug, destination=console)
LogHandler(id=file, level=warning, destination=log/emqx.log)
LogHandler(id=default, level=warning, destination=console)

file: 負(fù)責(zé)輸出到日志文件的 log handler。它沒(méi)有設(shè)置特殊過(guò)濾條件,即所有日志消息只要級(jí)別滿足要求就輸出。輸出目的地為日志文件。

default: 負(fù)責(zé)輸出到控制臺(tái)的 log handler。它沒(méi)有設(shè)置特殊過(guò)濾條件,即所有日志消息只要級(jí)別滿足要 求就輸出。輸出目的地為控制臺(tái)。

ssl_handler: ssl 的 log handler。它的過(guò)濾條件設(shè)置為當(dāng)日志是來(lái)自 ssl 模塊時(shí)輸出。輸出目的地為控制臺(tái)。

日志消息輸出前,首先檢查消息是否高于 primary log level,日志消息通過(guò)檢查后流入各 log handler,再檢查各 handler 的日志級(jí)別,如果日志消息也高于 handler level,則由對(duì)應(yīng)的 handler 執(zhí)行相應(yīng)的過(guò)濾條件,過(guò)濾條件通過(guò)則輸出。

設(shè)想一個(gè)場(chǎng)景,假設(shè) primary log level 設(shè)置為 info,log handler default (負(fù)責(zé)輸出到控制臺(tái)) 的級(jí)別設(shè)置為debug,log handler file (負(fù)責(zé)輸出到文件) 的級(jí)別設(shè)置為 warning:

雖然 console 日志是 debug 級(jí)別,但此時(shí) console 日志只能輸出 info 以及 info 以上的消息,因?yàn)榻?jīng)過(guò)primary level 過(guò)濾之后,流到 default 和 file 的日志只剩下 info 及以上的級(jí)別;

emqx.log.N 文件里面,包含了 warning 以及 warning 以上的日志消息。

在日志級(jí)別小節(jié)中提到的 log.level 是修改了全局的日志級(jí)別。這包括 primary log level 和各個(gè) handlers 的日志級(jí)別,都設(shè)置為了同一個(gè)值。

Primary Log Level 相當(dāng)于一個(gè)自來(lái)水管道系統(tǒng)的總開關(guān),一旦關(guān)閉則各個(gè)分支管道都不再有水流通過(guò)。這個(gè)機(jī)制保證了日志系統(tǒng)的高性能運(yùn)作。

運(yùn)行時(shí)修改日志級(jí)別

可以使用 EMQ X 的命令行工具 emqx_ctl 在運(yùn)行時(shí)修改 emqx 的日志級(jí)別:

修改全局日志級(jí)別:

例如,將 primary log level 以及所有 log handlers 的級(jí)別設(shè)置為 debug:

$ emqx_ctl log set-level debug

修改主日志級(jí)別:

例如,將 primary log level 設(shè)置為 debug:

$ emqx_ctl log handlers set-level file debug

0 分享到:
和我們?cè)诰€交談!