Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
1053-kernel-Fix-Logger-filter-removal-if-messag...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1053-kernel-Fix-Logger-filter-removal-if-message-format-i.patch of Package erlang
From f33c6d6c946a5f8358841c07d2d03a6fa80908f0 Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin <dmitri.vereshchagin@gmail.com> Date: Tue, 9 Aug 2022 01:17:44 +0300 Subject: [PATCH] kernel: Fix Logger filter removal if message format is atom or binary Log event check performed in logger_backend:do_apply_filters/4 doesn't tolerate atoms and binaries as message format strings. This may cause a filter to be removed > logger:notice(<<"hello">>, []). Logger - error: {removed_failing_filter,no_domain} For atom format strings it was partially fixed in OTP 25 by forcing atoms to strings before filters are applied (17c8fcf). --- lib/kernel/src/logger_internal.hrl | 2 +- lib/kernel/test/logger_SUITE.erl | 53 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/lib/kernel/src/logger_internal.hrl b/lib/kernel/src/logger_internal.hrl index 9f28157585..a4da02ba10 100644 --- a/lib/kernel/src/logger_internal.hrl +++ b/lib/kernel/src/logger_internal.hrl @@ -96,7 +96,7 @@ -define(IS_MSG(Msg), ((is_tuple(Msg) andalso tuple_size(Msg)==2) andalso - (is_list(element(1,Msg)) andalso is_list(element(2,Msg))) + (?IS_FORMAT(element(1,Msg)) andalso is_list(element(2,Msg))) orelse (element(1,Msg)==report andalso ?IS_REPORT(element(2,Msg))) orelse diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl index d2fae6bf94..ef1bef9df3 100644 --- a/lib/kernel/test/logger_SUITE.erl +++ b/lib/kernel/test/logger_SUITE.erl @@ -91,6 +91,7 @@ all() -> set_application_level, cache_module_level, format_report, + filter_successful, filter_failed, handler_failed, config_sanity_check, @@ -525,6 +526,58 @@ format_report(_Config) -> ok. +filter_successful(_Config) -> + ok = logger:add_handler(h1,?MODULE,#{level=>all,filter_default=>log}), + HF = {fun(#{meta:=#{filter:={set_msg,Msg}}} = Log,_) -> + Log#{msg:=Msg}; + (#{meta:=#{filter:={return,Ret}}},_) -> + Ret + end, + []}, + ok = logger:add_handler_filter(h1,hf,HF), + + ?LOG_NOTICE("hello",#{filter=>{return,stop}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_no_log(), + + ?LOG_NOTICE("hello",#{filter=>{return,ignore}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,"hello",?MY_LOC(2)), + + ?LOG_NOTICE("",#{filter=>{set_msg,{'hello',[]}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,'hello',[],?MY_LOC(2)), + + ?LOG_NOTICE("",#{filter=>{set_msg,{"hello",[]}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,"hello",[],?MY_LOC(2)), + + ?LOG_NOTICE("",#{filter=>{set_msg,{<<"hello">>,[]}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,<<"hello">>,[],?MY_LOC(2)), + + ?LOG_NOTICE("",#{filter=>{set_msg,{string,"hello"}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,"hello",?MY_LOC(2)), + + ?LOG_NOTICE("",#{filter=>{set_msg,{string,<<"hello">>}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,<<"hello">>,?MY_LOC(2)), + + logger:notice("",#{filter=>{set_msg,{report,M1=?map_rep}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,M1,#{}), + + logger:notice("",#{filter=>{set_msg,{report,M2=?keyval_rep}}}), + {ok,#{filters:=[_]}} = logger:get_handler_config(h1), + ok = check_logged(notice,M2,#{}), + + ok. + +filter_successful(cleanup,_Config) -> + logger:remove_handler(h1), + ok. + filter_failed(_Config) -> ok = logger:add_handler(h1,?MODULE,#{level=>notice,filter_default=>log}), -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor