查看源代码 logger_handler 行为模块 (内核 v10.2)
logger_handler 行为模块。
用于日志处理程序的行为模块。日志处理程序是一个回调模块,当日志事件通过所有过滤器并准备好记录到某处时会被调用。有关更多信息,请参阅用户指南中的处理程序。
另请参阅
摘要
回调
当即将添加新处理程序时,在临时进程上调用该函数。目的是验证配置并启动处理程序所需的所有资源。
当处理程序的配置即将更改时,在临时进程上调用该函数。目的是验证新配置并根据新配置采取行动。
当调用 Logger API 函数之一来获取处理程序配置时,会调用该函数,例如 logger:get_handler_config/1
。
当给定日志事件的所有主过滤器和所有处理程序过滤器都通过时,会调用该函数。它在客户端进程上调用,也就是发出日志事件的进程。
当即将删除处理程序时,在临时进程上调用该函数。目的是释放处理程序使用的所有资源。
类型
-type config() :: #{id => id(), config => term(), level => logger:level() | all | none, module => module(), filter_default => log | stop, filters => [{logger:filter_id(), logger:filter()}], formatter => {module(), logger:formatter_config()}}.
Logger 的处理程序配置数据。以下是默认值:
level => all
filter_default => log
filters => []
formatter => {logger_formatter, DefaultFormatterConfig
}
除了这些之外,Logger 还会自动插入以下字段,这些值取自logger:add_handler/3
的前两个参数。
id => HandlerId
module => Module
这些是只读的,不能在运行时更改。
处理程序特定的配置数据由处理程序回调本身插入,位于名为config
的字段关联的子结构中。有关这些处理程序的特定配置信息,请参阅logger_std_h
和logger_disk_log_h
手册页。
有关此格式化程序的默认配置信息,请参阅logger_formatter
手册页。
-type id() :: atom().
处理程序实例的唯一标识符。
-type olp_config() :: #{sync_mode_qlen => non_neg_integer(), drop_mode_qlen => pos_integer(), flush_qlen => pos_integer(), burst_limit_enable => boolean(), burst_limit_max_count => pos_integer(), burst_limit_window_time => pos_integer(), overload_kill_enable => boolean(), overload_kill_qlen => pos_integer(), overload_kill_mem_size => pos_integer(), overload_kill_restart_after => non_neg_integer() | infinity}.
过载保护配置。
有关更多详细信息,请参阅保护处理程序免受过载。
回调
-callback adding_handler(Config1) -> {ok, Config2} | {error, Reason} when Config1 :: config(), Config2 :: config(), Reason :: term().
当即将添加新处理程序时,在临时进程上调用该函数。目的是验证配置并启动处理程序所需的所有资源。
处理程序标识与Config1
中的id
键相关联。
如果一切成功,回调函数可以将可能的默认值或内部状态值添加到配置中,并在{ok,Config2}
中返回调整后的映射。
如果配置错误或初始化失败,回调函数必须返回{error,Reason}
。
-callback changing_config(SetOrUpdate, OldConfig, NewConfig) -> {ok, Config} | {error, Reason} when SetOrUpdate :: set | update, OldConfig :: config(), NewConfig :: config(), Config :: config(), Reason :: term().
当处理程序的配置即将更改时,在临时进程上调用该函数。目的是验证新配置并根据新配置采取行动。
OldConfig
是现有配置,NewConfig
是新配置。
处理程序标识与OldConfig
中的id
键相关联。
如果配置更改源自调用logger:set_handler_config/2,3
,则SetOrUpdate
的值为set
;如果配置更改源自logger:update_handler_config/2,3
,则值为update
。处理程序可以使用此参数来决定如何更新config
字段的值,即处理程序特定的配置数据。通常,如果SetOrUpdate
等于set
,则未指定的值必须给定其默认值。如果SetOrUpdate
等于update
,则必须使用在OldConfig
中找到的值。
如果一切成功,回调函数必须在{ok,Config}
中返回可能调整过的配置。
如果配置错误,回调函数必须返回{error,Reason}
。
-callback filter_config(Config) -> FilteredConfig when Config :: config(), FilteredConfig :: config().
当调用 Logger API 函数之一来获取处理程序配置时,会调用该函数,例如 logger:get_handler_config/1
。
它允许处理程序在将内部数据字段返回给调用者之前,从其配置数据中删除这些字段。
-callback log(LogEvent, Config) -> term() when LogEvent :: logger:log_event(), Config :: config().
当给定日志事件的所有主过滤器和所有处理程序过滤器都通过时,会调用该函数。它在客户端进程上调用,也就是发出日志事件的进程。
处理程序标识与Config
中的id
键相关联。
处理程序必须记录事件。
Logger 会忽略此函数的返回值。
-callback removing_handler(Config) -> ok when Config :: config().
当即将删除处理程序时,在临时进程上调用该函数。目的是释放处理程序使用的所有资源。
处理程序标识与Config
中的id
键相关联。
Logger 会忽略返回值。