File 0163-logger-Make-logger_simple-print-pretty-reports.patch of Package erlang

From 95dcdb77541d2d74ae6c3dc3b858f0bd05309336 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Wed, 25 Nov 2020 16:00:08 +0100
Subject: [PATCH] logger: Make logger_simple print pretty reports

When the simple logger has been started we are late enough
in the boot cycle that we can load any modules that we need
in order to handle printing the crash. We wrap the call to
logger_formatter in a try catch just to make sure that in case
we should fail we actually get something printed.
---
 erts/preloaded/src/init.erl        | 24 +++++++++---------------
 lib/kernel/src/logger_simple_h.erl | 20 ++++++++++++++++----
 2 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/erts/preloaded/src/init.erl b/erts/preloaded/src/init.erl
index e39c13b63d..2eabe5a5a6 100644
--- a/erts/preloaded/src/init.erl
+++ b/erts/preloaded/src/init.erl
@@ -486,21 +486,15 @@ do_handle_msg(Msg,State) ->
 	{From, {ensure_loaded, _}} ->
 	    From ! {init, not_allowed};
 	X ->
-            %% This is equal to calling logger:info/3 which we don't
-            %% want to do from the init process, at least not during
-            %% system boot. We don't want to call logger:timestamp()
-            %% either.
-	    case whereis(user) of
-		undefined ->
-                    catch logger ! {log, info, "init got unexpected: ~p", [X],
-                                    #{pid=>self(),
-                                      gl=>self(),
-                                      time=>os:system_time(microsecond),
-                                      error_logger=>#{tag=>info_msg}}};
-		User ->
-		    User ! X,
-		    ok
-	    end
+            %% Only call the logger module if the logger_server is running.
+            %% If it is not running, then we don't know that the logger
+            %% module can be loaded.
+            case whereis(logger_server) =/= undefined of
+                true -> logger:info("init got unexpected: ~p", [X],
+                                    #{ error_logger=>#{tag=>info_msg}});
+                false -> erlang:display_string("init got unexpected: "),
+                         erlang:display(X)
+            end
     end.		  
 
 %%% -------------------------------------------------
diff --git a/lib/kernel/src/logger_simple_h.erl b/lib/kernel/src/logger_simple_h.erl
index 03cbdae437..fe8db09e83 100644
--- a/lib/kernel/src/logger_simple_h.erl
+++ b/lib/kernel/src/logger_simple_h.erl
@@ -95,7 +95,7 @@ init(Starter) ->
 loop(Buffer) ->
     receive
         stop ->
-            %% We replay the logger messages of there is
+            %% We replay the logger messages if there is
             %% a default handler when the simple handler
             %% is removed.
             case logger:get_handler_config(default) of
@@ -139,13 +139,23 @@ drop_msg(N) ->
 %%%-----------------------------------------------------------------
 %%% Internal
 
-%% Can't do io_lib:format
+do_log(Log) ->
+    try
+        Str = logger_formatter:format(Log,
+                 #{ legacy_header => true, single_line => false
+                   ,depth => unlimited, time_offset => ""
+                 }),
+        erlang:display_string(lists:flatten(unicode:characters_to_list(Str)))
+    catch _E:_R:_ST ->
+        % erlang:display({_E,_R,_ST}),
+        display_log(Log)
+    end.
 
-do_log(#{msg:={report,Report},
+display_log(#{msg:={report,Report},
          meta:=#{time:=T,error_logger:=#{type:=Type}}}) ->
     display_date(T),
     display_report(Type,Report);
-do_log(#{msg:=Msg,meta:=#{time:=T}}) ->
+display_log(#{msg:=Msg,meta:=#{time:=T}}) ->
     display_date(T),
     display(Msg).
 
@@ -198,6 +208,8 @@ display_report(Atom, A) when is_atom(Atom) ->
 display_report(F, A) ->
     erlang:display({F, A}).
 
+display_report(#{ report := Report }) ->
+    display_report(Report);
 display_report([A, []]) ->
     %% Special case for crash reports when process has no links
     display_report(A);
-- 
2.26.2

openSUSE Build Service is sponsored by