教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

EMQ X有哪些日志级别?怎样在运行时修改日志级别?

更新时间:2023年10月18日17时53分 来源:传智教育 浏览次数:

好口碑IT培训

EMQ X 使用了分层的日志系统,在日志级别上,包括全局日志级别 (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 是负责日志处理和输出的工作进程,它由 log handler id 唯一标识,并负有如下任务:

接收什么级别的日志

如何过滤日志消息

将日志输出到什么地方

我们来看一下 emqx 默认安装的 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: 负责输出到日志文件的 log handler。它没有设置特殊过滤条件,即所有日志消息只要级别满足要求就输出。输出目的地为日志文件。

default: 负责输出到控制台的 log handler。它没有设置特殊过滤条件,即所有日志消息只要级别满足要 求就输出。输出目的地为控制台。

ssl_handler: ssl 的 log handler。它的过滤条件设置为当日志是来自 ssl 模块时输出。输出目的地为控制台。

日志消息输出前,首先检查消息是否高于 primary log level,日志消息通过检查后流入各 log handler,再检查各 handler 的日志级别,如果日志消息也高于 handler level,则由对应的 handler 执行相应的过滤条件,过滤条件通过则输出。

设想一个场景,假设 primary log level 设置为 info,log handler default (负责输出到控制台) 的级别设置为debug,log handler file (负责输出到文件) 的级别设置为 warning:

虽然 console 日志是 debug 级别,但此时 console 日志只能输出 info 以及 info 以上的消息,因为经过primary level 过滤之后,流到 default 和 file 的日志只剩下 info 及以上的级别;

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

在日志级别小节中提到的 log.level 是修改了全局的日志级别。这包括 primary log level 和各个 handlers 的日志级别,都设置为了同一个值。

Primary Log Level 相当于一个自来水管道系统的总开关,一旦关闭则各个分支管道都不再有水流通过。这个机制保证了日志系统的高性能运作。

运行时修改日志级别

可以使用 EMQ X 的命令行工具 emqx_ctl 在运行时修改 emqx 的日志级别:

修改全局日志级别:

例如,将 primary log level 以及所有 log handlers 的级别设置为 debug:

$ emqx_ctl log set-level debug

修改主日志级别:

例如,将 primary log level 设置为 debug:

$ emqx_ctl log handlers set-level file debug

0 分享到:
和我们在线交谈!