查看源代码 logger_filters (kernel v10.2)
用于 Logger 的过滤器。
此模块导出的所有函数都可以用作主要过滤器或处理程序过滤器。有关如何添加过滤器的更多信息,请参阅 logger:add_primary_filter/2
和 logger:add_handler_filter/3
。
使用 logger:remove_primary_filter/1
和 logger:remove_handler_filter/2
删除过滤器。
另请参阅
摘要
函数
此过滤器提供了一种基于 Metadata
中的 domain
字段过滤日志事件的方法。此字段是可选的,其目的是对来自特定功能区域的日志事件进行分组。这样可以在 Logger 处理程序中进行过滤或其他特殊处理。
此过滤器提供了一种基于日志级别过滤日志事件的方法。它通过将日志级别与指定的 MatchLevel
进行比较来匹配日志事件。
此过滤器匹配来自 supervisor
和 application_controller
的所有进度报告。
此过滤器匹配所有源自其组长位于远程节点上的进程的事件。
函数
-spec domain(LogEvent, Extra) -> logger:filter_return() when LogEvent :: logger:log_event(), Extra :: {Action, Compare, MatchDomain}, Action :: log | stop, Compare :: super | sub | equal | not_equal | undefined, MatchDomain :: [atom()].
此过滤器提供了一种基于 Metadata
中的 domain
字段过滤日志事件的方法。此字段是可选的,其目的是对来自特定功能区域的日志事件进行分组。这样可以在 Logger 处理程序中进行过滤或其他特殊处理。
域字段必须是原子列表,随着列表的增长,会创建更小、更专业的域。最大的域是 []
,它包含所有可能的域。
例如,考虑以下域
D1 = [otp]
D2 = [otp, sasl]
D1
是两者中最大的,被称为 D2
的超域。D2
是 D1
的子域。D1
和 D2
都是 []
的子域。
以上域用于源自 Erlang/OTP 的日志。D1 指定日志事件来自 Erlang/OTP,而 D2 指示日志事件是所谓的 SASL 报告。
通过 logger:add_primary_filter/2
或 logger:add_handler_filter/3
添加过滤器时,指定 domain/2
函数的 Extra
参数。
该过滤器将日志事件元数据中的 domain
字段的值 (Domain
) 与 MatchDomain
进行比较。如果 Compare
的值为以下情况,则过滤器匹配:
sub
- 且Domain
等于或为MatchDomain
的子域,即如果MatchDomain
是Domain
的前缀。super
- 且Domain
等于或为MatchDomain
的超域,即如果Domain
是MatchDomain
的前缀。equal
- 且Domain
等于MatchDomain
。not_equal
- 且Domain
与MatchDomain
不同,或者元数据中没有域字段。undefined
- 且元数据中没有域字段。在这种情况下,MatchDomain
必须设置为[]
。
如果过滤器匹配并且 Action
为 log
,则允许日志事件。如果过滤器匹配并且 Action
为 stop
,则停止日志事件。
如果过滤器不匹配,则返回 ignore
,这意味着其他过滤器或配置参数 filter_default
的值会决定是否允许该事件。
不包含任何域字段的日志事件仅在 Compare
等于 undefined
或 not_equal
时才匹配。
示例:停止所有域为 [otp, sasl | _]
的事件
1> logger:set_handler_config(h1, filter_default, log). % this is the default
ok
2> Filter = {fun logger_filters:domain/2, {stop, sub, [otp, sasl]}}.
...
3> logger:add_handler_filter(h1, no_sasl, Filter).
ok
-spec level(LogEvent, Extra) -> logger:filter_return() when LogEvent :: logger:log_event(), Extra :: {Action, Operator, MatchLevel}, Action :: log | stop, Operator :: neq | eq | lt | gt | lteq | gteq, MatchLevel :: logger:level().
此过滤器提供了一种基于日志级别过滤日志事件的方法。它通过将日志级别与指定的 MatchLevel
进行比较来匹配日志事件。
通过 logger:add_primary_filter/2
或 logger:add_handler_filter/3
添加过滤器时,指定 Extra
参数。
该过滤器通过调用 logger:compare_levels(Level, MatchLevel)
将事件的日志级别 (Level
) 的值与 MatchLevel
进行比较。如果 Operator
的值为以下情况,则过滤器匹配:
neq
- 且比较函数返回lt
或gt
。eq
- 且比较函数返回eq
。lt
- 且比较函数返回lt
。gt
- 且比较函数返回gt
。lteq
- 且比较函数返回lt
或eq
。gteq
- 且比较函数返回gt
或eq
。
如果过滤器匹配并且 Action
为 log
,则允许日志事件。如果过滤器匹配并且 Action
为 stop
,则停止日志事件。
如果过滤器不匹配,则返回 ignore
,这意味着其他过滤器或配置参数 filter_default
的值将决定是否允许该事件。
示例:仅允许 debug 级别的日志事件
logger:set_handler_config(h1, filter_default, stop).
Filter = {fun logger_filters:level/2, {log, eq, debug}}.
logger:add_handler_filter(h1, debug_only, Filter).
ok
-spec progress(LogEvent, Extra) -> logger:filter_return() when LogEvent :: logger:log_event(), Extra :: log | stop.
此过滤器匹配来自 supervisor
和 application_controller
的所有进度报告。
如果 Extra
为 log
,则允许进度报告。如果 Extra
为 stop
,则停止进度报告。
对于所有其他日志事件,该过滤器返回 ignore
。
-spec remote_gl(LogEvent, Extra) -> logger:filter_return() when LogEvent :: logger:log_event(), Extra :: log | stop.
此过滤器匹配所有源自其组长位于远程节点上的进程的事件。
如果 Extra
为 log
,则允许匹配的事件。如果 Extra
为 stop
,则停止匹配的事件。
对于所有其他日志事件,该过滤器返回 ignore
。