查看源代码 logger_filters (kernel v10.2)

用于 Logger 的过滤器。

此模块导出的所有函数都可以用作主要过滤器或处理程序过滤器。有关如何添加过滤器的更多信息,请参阅 logger:add_primary_filter/2logger:add_handler_filter/3

使用 logger:remove_primary_filter/1logger:remove_handler_filter/2 删除过滤器。

另请参阅

logger

摘要

函数

此过滤器提供了一种基于 Metadata 中的 domain 字段过滤日志事件的方法。此字段是可选的,其目的是对来自特定功能区域的日志事件进行分组。这样可以在 Logger 处理程序中进行过滤或其他特殊处理。

此过滤器提供了一种基于日志级别过滤日志事件的方法。它通过将日志级别与指定的 MatchLevel 进行比较来匹配日志事件。

此过滤器匹配来自 supervisorapplication_controller 的所有进度报告。

此过滤器匹配所有源自其组长位于远程节点上的进程的事件。

函数

链接到此函数

domain(LogEvent, Extra)

查看源代码 (自 OTP 21.0 起)
-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 的超域。D2D1 的子域。D1D2 都是 [] 的子域。

以上域用于源自 Erlang/OTP 的日志。D1 指定日志事件来自 Erlang/OTP,而 D2 指示日志事件是所谓的 SASL 报告

通过 logger:add_primary_filter/2logger:add_handler_filter/3 添加过滤器时,指定 domain/2 函数的 Extra 参数。

该过滤器将日志事件元数据中的 domain 字段的值 (Domain) 与 MatchDomain 进行比较。如果 Compare 的值为以下情况,则过滤器匹配:

  • sub - 且 Domain 等于或为 MatchDomain 的子域,即如果 MatchDomainDomain 的前缀。

  • super - 且 Domain 等于或为 MatchDomain 的超域,即如果 DomainMatchDomain 的前缀。

  • equal - 且 Domain 等于 MatchDomain

  • not_equal - 且 DomainMatchDomain 不同,或者元数据中没有域字段。

  • undefined - 且元数据中没有域字段。在这种情况下,MatchDomain 必须设置为 []

如果过滤器匹配并且 Actionlog,则允许日志事件。如果过滤器匹配并且 Actionstop,则停止日志事件。

如果过滤器不匹配,则返回 ignore,这意味着其他过滤器或配置参数 filter_default 的值会决定是否允许该事件。

不包含任何域字段的日志事件仅在 Compare 等于 undefinednot_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
链接到此函数

level(LogEvent, Extra)

查看源代码 (自 OTP 21.0 起)
-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/2logger:add_handler_filter/3 添加过滤器时,指定 Extra 参数。

该过滤器通过调用 logger:compare_levels(Level, MatchLevel) 将事件的日志级别 (Level) 的值与 MatchLevel 进行比较。如果 Operator 的值为以下情况,则过滤器匹配:

  • neq - 且比较函数返回 ltgt

  • eq - 且比较函数返回 eq

  • lt - 且比较函数返回 lt

  • gt - 且比较函数返回 gt

  • lteq - 且比较函数返回 lteq

  • gteq - 且比较函数返回 gteq

如果过滤器匹配并且 Actionlog,则允许日志事件。如果过滤器匹配并且 Actionstop,则停止日志事件。

如果过滤器不匹配,则返回 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
链接到此函数

progress(LogEvent, Extra)

查看源代码 (自 OTP 21.0 起)
-spec progress(LogEvent, Extra) -> logger:filter_return()
                  when LogEvent :: logger:log_event(), Extra :: log | stop.

此过滤器匹配来自 supervisorapplication_controller 的所有进度报告。

如果 Extralog,则允许进度报告。如果 Extrastop,则停止进度报告。

对于所有其他日志事件,该过滤器返回 ignore

链接到此函数

remote_gl(LogEvent, Extra)

查看源代码 (自 OTP 21.0 起)
-spec remote_gl(LogEvent, Extra) -> logger:filter_return()
                   when LogEvent :: logger:log_event(), Extra :: log | stop.

此过滤器匹配所有源自其组长位于远程节点上的进程的事件。

如果 Extralog,则允许匹配的事件。如果 Extrastop,则停止匹配的事件。

对于所有其他日志事件,该过滤器返回 ignore