File 0265-logger-Don-t-use-original-meta-data-in-internal-log.patch of Package erlang

From 8484bc7f9713f2bac3c0a1d56cab888524a18b6f Mon Sep 17 00:00:00 2001
From: Siri Hansen <siri.hansen@nordnet.se>
Date: Mon, 7 Mar 2022 15:37:19 +0100
Subject: [PATCH] logger: Don't use original meta data in internal log

logger_backend emits internal debug logs if a handler or a filter
fails. This is done using the ?LOG_INTERNAL macro. Prior to this
commit, these logs would get the meta data from the original failing
log event. This commit instead uses the actual location of the
internal debug log.

The original meta data is still included as a part of the log report,
so no data is lost.
---
 lib/kernel/src/logger_server.erl |  2 +-
 lib/kernel/test/logger_SUITE.erl | 27 ++++++++++++++++++++++++++-
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/lib/kernel/src/logger_server.erl b/lib/kernel/src/logger_server.erl
index 942c0aac5a..dff30a95fc 100644
--- a/lib/kernel/src/logger_server.erl
+++ b/lib/kernel/src/logger_server.erl
@@ -623,7 +623,7 @@ do_internal_log(Level,Location,Log,[Report] = Data) ->
 do_internal_log(Level,Location,Log,[Fmt,Args] = Data) ->
     do_internal_log(Level,Location,Log,Data,{Fmt,Args}).
 do_internal_log(Level,Location,Log,Data,Msg) ->
-    Meta = logger:add_default_metadata(maps:merge(Location,maps:get(meta,Log,#{}))),
+    Meta = logger:add_default_metadata(Location),
     %% Spawn these to avoid deadlocks
     case Log of
         #{ meta := #{ internal_log_event := true } } ->
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index 3b99b21b4f..d2fae6bf94 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -103,7 +103,8 @@ all() ->
      app_config,
      kernel_config,
      pretty_print,
-     pathological].
+     pathological,
+     internal_log].
 
 start_stop(_Config) ->
     S = whereis(logger),
@@ -1222,6 +1223,30 @@ pathological(_Config) ->
     check_logged(notice,"report",[],#{}),
     ok.
 
+internal_log(_Config) ->
+    register(callback_receiver, self()),
+    {error, {not_found, h1}} = logger:get_handler_config(h1),
+    ok = logger:add_handler(h1, ?MODULE, #{tc_proc => self()}),
+    OriginalMeta = #{
+        mfa => {orig_mod, orig_func, 0},
+        line => 0,
+        file => "path/to/orig_mod.beam",
+        pid => self(),
+        time => logger:timestamp(),
+        gl => group_leader()
+    },
+    OriginalLog = #{
+        level => notice,
+        msg => "Original log",
+        meta => OriginalMeta
+    },
+    Report = [{testing, internal_log}],
+
+    ?LOG_INTERNAL(notice, OriginalLog, Report),
+    ok = check_logged(notice, Report, ?MY_LOC(1)),
+
+    ok.
+
 %%%-----------------------------------------------------------------
 %%% Internal
 check_logged(Level,Format,Args,Meta) ->
-- 
2.34.1

openSUSE Build Service is sponsored by