Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0163-logger-Make-logger_simple-print-pretty-rep...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
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