檢視原始碼 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 報告。
domain/2
函式的 Extra
參數是在通過 logger:add_primary_filter/2
或 logger:add_handler_filter/3
新增篩選器時指定的。
篩選器會將記錄事件的中繼資料中的 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
進行比較來比對記錄事件。
Extra
參數是在通過 logger:add_primary_filter/2
或 logger:add_handler_filter/3
新增篩選器時指定的。
篩選器會通過呼叫 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
的值,將決定是否允許該事件。
範例:僅允許偵錯層級的記錄事件
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
。