Selaa lähdekoodia

Rework the 'old shell' warning, and some related work

Add ability for handlers to 'fatally' fail, so they won't attempt to
reinstall themselves later.

Also fix an issue with the INT_LOG macro not doing the right thing when
only the lager_throttle_backend was installed.
pull/139/head
Andrew Thompson 12 vuotta sitten
vanhempi
commit
ccdc4d4c8f
5 muutettua tiedostoa jossa 32 lisäystä ja 32 poistoa
  1. +1
    -1
      include/lager.hrl
  2. +13
    -23
      src/lager_console_backend.erl
  3. +1
    -1
      src/lager_file_backend.erl
  4. +16
    -6
      src/lager_handler_watcher.erl
  5. +1
    -1
      src/lager_handler_watcher_sup.erl

+ 1
- 1
include/lager.hrl Näytä tiedosto

@ -84,7 +84,7 @@
%% from a gen_event handler
spawn(fun() ->
case catch(gen_event:which_handlers(lager_event)) of
X when X == []; X == {'EXIT', noproc} ->
X when X == []; X == {'EXIT', noproc}; X == [lager_backend_throttle] ->
%% there's no handlers yet or lager isn't running, try again
%% in half a second.
timer:sleep(500),

+ 13
- 23
src/lager_console_backend.erl Näytä tiedosto

@ -40,13 +40,6 @@ init([Level, true]) -> % for backwards compatibility
init([Level,false]) -> % for backwards compatibility
init([Level,{lager_default_formatter,?TERSE_FORMAT ++ [eol()]}]);
init([Level,{Formatter,FormatterConfig}]) when is_atom(Formatter) ->
IsSafe = case is_new_style_console_available() of
false=Res ->
spawn(fun warn_user/0),
Res;
Res ->
Res
end,
Colors = case application:get_env(lager, colored) of
{ok, true} ->
{ok, LagerColors} = application:get_env(lager, colors),
@ -54,9 +47,19 @@ init([Level,{Formatter,FormatterConfig}]) when is_atom(Formatter) ->
_ -> []
end,
try {IsSafe, lager_util:config_to_mask(Level)} of
try {is_new_style_console_available(), lager_util:config_to_mask(Level)} of
{false, _} ->
{error, "Old style console was detected"};
Msg = "Lager's console backend is incompatible with the 'old' shell, not enabling it",
%% be as noisy as possible, log to every possible place
try
alarm_handler:set_alarm({?MODULE, "WARNING: " ++ Msg})
catch
_:_ ->
error_logger:warning_msg(Msg ++ "~n")
end,
io:format("WARNING: " ++ Msg ++ "~n"),
?INT_LOG(warning, Msg, []),
{error, {fatal, old_shell}};
{true, Levels} ->
{ok, #state{level=Levels,
formatter=Formatter,
@ -64,7 +67,7 @@ init([Level,{Formatter,FormatterConfig}]) when is_atom(Formatter) ->
colors=Colors}}
catch
_:_ ->
{error, bad_log_level}
{error, {fatal, bad_log_level}}
end;
init(Level) ->
init([Level,{lager_default_formatter,?TERSE_FORMAT ++ [eol()]}]).
@ -134,19 +137,6 @@ is_new_style_console_available() ->
is_pid(whereis(user_drv)).
-endif.
warn_user() ->
Msg = lists:flatten(
io_lib:format("WARNING: old-style console is in use, so ~s "
"log output to the console is disabled. "
"Restart the VM on a pseudo-tty to ensure "
"use of the new-style VM console.",
[?MODULE])),
catch alarm_handler:set_alarm({?MODULE, Msg}),
[begin
error_logger:warning_msg(Msg),
timer:sleep(1000)
end || _ <- lists:seq(1, 10)].
-ifdef(TEST).
console_log_test_() ->
%% tiny recursive fun that pretends to be a group leader

+ 1
- 1
src/lager_file_backend.erl Näytä tiedosto

@ -99,7 +99,7 @@ init(LogFileConfig) when is_list(LogFileConfig) ->
case validate_logfile_proplist(LogFileConfig) of
false ->
%% falied to validate config
{error, bad_config};
{error, {fatal, bad_config}};
Config ->
%% probabably a better way to do this, but whatever
[Name, Level, Date, Size, Count, SyncInterval, SyncSize, SyncOn, CheckInterval, Formatter, FormatterConfig] =

+ 16
- 6
src/lager_handler_watcher.erl Näytä tiedosto

@ -23,6 +23,8 @@
-behaviour(gen_server).
-include("lager.hrl").
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
@ -73,6 +75,8 @@ handle_info({gen_event_EXIT, Module, Reason}, #state{module=Module,
handle_info(reinstall_handler, #state{module=Module, config=Config, event=Event} = State) ->
install_handler(Event, Module, Config),
{noreply, State};
handle_info(stop, State) ->
{stop, normal, State};
handle_info(_Info, State) ->
{noreply, State}.
@ -87,12 +91,18 @@ code_change(_OldVsn, State, _Extra) ->
install_handler(Event, Module, Config) ->
case gen_event:add_sup_handler(Event, Module, Config) of
ok ->
_ = lager:log(debug, self(), "Lager installed handler ~p into ~p", [Module, Event]),
?INT_LOG(debug, "Lager installed handler ~p into ~p", [Module, Event]),
lager:update_loglevel_config(),
ok;
{error, {fatal, Reason}} ->
?INT_LOG(error, "Lager fatally failed to install handler ~p into"
" ~p, NOT retrying: ~p", [Module, Event, Reason]),
%% tell ourselves to stop
self() ! stop,
ok;
Error ->
%% try to reinstall it later
_ = lager:log(error, self(), "Lager failed to install handler ~p into"
?INT_LOG(error, "Lager failed to install handler ~p into"
" ~p, retrying later : ~p", [Module, Event, Error]),
erlang:send_after(5000, self(), reinstall_handler),
ok
@ -145,10 +155,10 @@ reinstall_on_runtime_failure_test_() ->
?assert(lists:member(lager_crash_backend, gen_event:which_handlers(lager_event))),
timer:sleep(6000),
?assertEqual(2, lager_test_backend:count()),
{_Level, _Time, Message, _Metadata} = lager_test_backend:pop(),
?assertEqual("Lager event handler lager_crash_backend exited with reason crash", lists:flatten(Message)),
{_Level2, _Time2, Message2, _Metadata} = lager_test_backend:pop(),
?assertMatch("Lager failed to install handler lager_crash_backend into lager_event, retrying later :"++_, lists:flatten(Message2)),
{_Severity, _Date, Msg, _Metadata} = lager_test_backend:pop(),
?assertEqual("Lager event handler lager_crash_backend exited with reason crash", lists:flatten(Msg)),
{_Severity2, _Date2, Msg2, _Metadata2} = lager_test_backend:pop(),
?assertMatch("Lager failed to install handler lager_crash_backend into lager_event, retrying later :"++_, lists:flatten(Msg2)),
?assertEqual(false, lists:member(lager_crash_backend, gen_event:which_handlers(lager_event)))
after
application:stop(lager),

+ 1
- 1
src/lager_handler_watcher_sup.erl Näytä tiedosto

@ -35,5 +35,5 @@ init([]) ->
{ok, {{simple_one_for_one, 10, 60},
[
{lager_handler_watcher, {lager_handler_watcher, start_link, []},
transient, 5000, worker, [lager_handler_watcher]}
temporary, 5000, worker, [lager_handler_watcher]}
]}}.

Ladataan…
Peruuta
Tallenna