diff options
author | Lukas Larsson <lukas@erlang.org> | 2020-02-20 15:53:10 +0100 |
---|---|---|
committer | Lukas Larsson <lukas@erlang.org> | 2020-02-21 10:06:51 +0100 |
commit | 16e3e72deb5ae77005ca43824a2401c05f377f98 (patch) | |
tree | 3d015a224c915228750ca2ae64c14fb28a7744ce | |
parent | 6d44ae718520f0678413cbace51734acca584e2c (diff) | |
download | erlang-16e3e72deb5ae77005ca43824a2401c05f377f98.tar.gz |
logger: Don't crash when unavailable during boot
If we try to log something before logger is started we don't want
to crash. Instead we print using erlang:display.
-rw-r--r-- | erts/preloaded/src/erl_prim_loader.erl | 18 | ||||
-rw-r--r-- | erts/preloaded/src/prim_file.erl | 10 | ||||
-rw-r--r-- | lib/kernel/src/code_server.erl | 25 |
3 files changed, 32 insertions, 21 deletions
diff --git a/erts/preloaded/src/erl_prim_loader.erl b/erts/preloaded/src/erl_prim_loader.erl index 1605c20f2c..89c535c43a 100644 --- a/erts/preloaded/src/erl_prim_loader.erl +++ b/erts/preloaded/src/erl_prim_loader.erl @@ -300,12 +300,18 @@ check_file_result(Func, Target, {error,Reason}) -> %% This is equal to calling logger:error/2 which %% we don't want to do from code_server during system boot. %% We don't want to call logger:timestamp() either. - logger ! {log,error,#{label=>{?MODULE,file_error},report=>Report}, - #{pid=>self(), - gl=>group_leader(), - time=>os:system_time(microsecond), - error_logger=>#{tag=>error_report, - type=>std_error}}}, + try + logger ! {log,error,#{label=>{?MODULE,file_error},report=>Report}, + #{pid=>self(), + gl=>group_leader(), + time=>os:system_time(microsecond), + error_logger=>#{tag=>error_report, + type=>std_error}}} + catch _:_ -> + %% If logger has not been started yet we just display it + erlang:display({?MODULE,file_error}), + erlang:display(Report) + end, error end; check_file_result(_, _, Other) -> diff --git a/erts/preloaded/src/prim_file.erl b/erts/preloaded/src/prim_file.erl index 1aa5d85c64..f241be8569 100644 --- a/erts/preloaded/src/prim_file.erl +++ b/erts/preloaded/src/prim_file.erl @@ -575,11 +575,11 @@ list_dir_convert([RawName | Rest], SkipInvalid, Result) -> %% This is equal to calling logger:warning/3 which %% we don't want to do from code_server during system boot. %% We don't want to call logger:timestamp() either. - logger ! {log,warning,"Non-unicode filename ~p ignored\n", [RawName], - #{pid=>self(), - gl=>group_leader(), - time=>os:system_time(microsecond), - error_logger=>#{tag=>warning_msg}}}, + catch logger ! {log,warning,"Non-unicode filename ~p ignored\n", [RawName], + #{pid=>self(), + gl=>group_leader(), + time=>os:system_time(microsecond), + error_logger=>#{tag=>warning_msg}}}, list_dir_convert(Rest, SkipInvalid, Result); {error, _} -> {error, {no_translation, RawName}} diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl index 68e1205301..3542ee3a7f 100644 --- a/lib/kernel/src/code_server.erl +++ b/lib/kernel/src/code_server.erl @@ -1437,11 +1437,16 @@ error_msg(Format, Args) -> %% This is equal to calling logger:error/3 which we don't want to %% do from code_server. We don't want to call logger:timestamp() %% either. - logger ! {log,error,Format,Args, - #{pid=>self(), - gl=>group_leader(), - time=>os:system_time(microsecond), - error_logger=>#{tag=>error}}}, + try + logger ! {log,error,Format,Args, + #{pid=>self(), + gl=>group_leader(), + time=>os:system_time(microsecond), + error_logger=>#{tag=>error}}} + catch _:_ -> + erlang:display({?MODULE,error}), + erlang:display({Format,Args}) + end, ok. -spec info_msg(io:format(), [term()]) -> 'ok'. @@ -1449,11 +1454,11 @@ info_msg(Format, Args) -> %% This is equal to calling logger:info/3 which we don't want to %% do from code_server. We don't want to call logger:timestamp() %% either. - logger ! {log,info,Format,Args, - #{pid=>self(), - gl=>group_leader(), - time=>os:system_time(microsecond), - error_logger=>#{tag=>info_msg}}}, + catch logger ! {log,info,Format,Args, + #{pid=>self(), + gl=>group_leader(), + time=>os:system_time(microsecond), + error_logger=>#{tag=>info_msg}}}, ok. objfile_extension() -> |