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

全國咨詢/投訴熱線:400-618-4000

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

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

好口碑IT培訓(xùn)

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

[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)識,并負(fù)有如下任務(wù):

接收什么級別的日志

如何過濾日志消息

將日志輸出到什么地方

我們來看一下 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。它沒有設(shè)置特殊過濾條件,即所有日志消息只要級別滿足要求就輸出。輸出目的地為日志文件。

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

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

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

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

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

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

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

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

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

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

修改全局日志級別:

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

$ emqx_ctl log set-level debug

修改主日志級別:

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

$ emqx_ctl log handlers set-level file debug

0 分享到:
和我們在線交談!