Quellcode durchsuchen

WIP

Finish lager API modifications
Update config API to handle multiple sinks
Identify areas where new code is yet to be written
pull/264/head
Mark Allen vor 10 Jahren
Ursprung
Commit
90ce2ac2b9
4 geänderte Dateien mit 40 neuen und 25 gelöschten Zeilen
  1. +12
    -12
      src/lager.erl
  2. +3
    -0
      src/lager_app.erl
  3. +20
    -13
      src/lager_config.erl
  4. +5
    -0
      src/lager_sup.erl

+ 12
- 12
src/lager.erl Datei anzeigen

@ -28,9 +28,9 @@
md/0, md/1,
trace/2, trace/3, trace_file/2, trace_file/3, trace_file/4, trace_console/1, trace_console/2,
clear_all_traces/0, stop_trace/1, stop_trace/3, status/0,
get_loglevel/1, set_loglevel/2, set_loglevel/3, get_loglevels/0,
update_loglevel_config/0, posix_error/1,
safe_format/3, safe_format_chop/3, dispatch_log/5, dispatch_log/9,
get_loglevel/1, set_loglevel/2, set_loglevel/3, get_loglevels/1,
update_loglevel_config/1, posix_error/1,
safe_format/3, safe_format_chop/3, dispatch_log/5, dispatch_log/6, dispatch_log/9,
do_log/9, pr/2]).
-type log_level() :: debug | info | notice | warning | error | critical | alert | emergency.
@ -329,7 +329,7 @@ set_loglevel(Sink, Handler, Ident, Level) when is_atom(Level) ->
_ -> {Handler, Ident}
end,
Reply = gen_event:call(Sink, HandlerArg, {set_loglevel, Level}, infinity),
update_loglevel_config(),
update_loglevel_config(Sink),
Reply.
@ -363,9 +363,9 @@ posix_error(Error) ->
safe_format_chop("~p", [Error], ?DEFAULT_TRUNCATION).
%% @private
get_loglevels() ->
[gen_event:call(lager_event, Handler, get_loglevel, infinity) ||
Handler <- gen_event:which_handlers(lager_event)].
get_loglevels(Sink) ->
[gen_event:call(Handler, get_loglevel, infinity) ||
Handler <- gen_event:which_handlers(Sink)].
%% @private
add_trace_to_loglevel_config(Trace) ->
@ -374,16 +374,16 @@ add_trace_to_loglevel_config(Trace) ->
false ->
NewTraces = [Trace|Traces],
_ = lager_util:trace_filter([ element(1, T) || T <- NewTraces]),
lager_config:set(loglevel, {MinLevel, [Trace|Traces]});
lager_config:set(lager_event, loglevel, {MinLevel, [Trace|Traces]});
_ ->
ok
end.
%% @doc recalculate min log level
update_loglevel_config() ->
{_, Traces} = lager_config:get(loglevel),
MinLog = minimum_loglevel(get_loglevels()),
lager_config:set(loglevel, {MinLog, Traces}).
update_loglevel_config(Sink) ->
{_, Traces} = lager_config:get(Sink, loglevel),
MinLog = minimum_loglevel(get_loglevels(Sink)),
lager_config:set(Sink, loglevel, {MinLog, Traces}).
%% @private
minimum_loglevel(Levels) ->

+ 3
- 0
src/lager_app.erl Datei anzeigen

@ -62,6 +62,9 @@ start(_StartType, _StartArgs) ->
throw({error, bad_config})
end,
%% TODO:
%% Read config for other event sinks here and start them appropriately
Handlers = case application:get_env(lager, handlers) of
undefined ->
[{lager_console_backend, info},

+ 20
- 13
src/lager_config.erl Datei anzeigen

@ -20,10 +20,15 @@
-include("lager.hrl").
-export([new/0, get/1, get/2, set/2]).
-export([new/0, get/1, get/2, get/3, set/2, set/3]).
-define(TBL, lager_config).
%% For multiple sinks, the key is now the registered event name and the old key
%% as a tuple.
%%
%% {{lager_event, loglevel}, Value} instead of {loglevel, Value}
new() ->
%% set up the ETS configuration table
_ = try ets:new(?TBL, [named_table, public, set, {keypos, 1}, {read_concurrency, true}]) of
@ -36,29 +41,31 @@ new() ->
%% use insert_new here so that if we're in an appup we don't mess anything up
%%
%% until lager is completely started, allow all messages to go through
ets:insert_new(?TBL, {loglevel, {element(2, lager_util:config_to_mask(debug)), []}}),
ets:insert_new(?TBL, {{lager_event, loglevel}, {element(2, lager_util:config_to_mask(debug)), []}}),
ok.
get(Key) ->
case ets:lookup(?TBL, Key) of
[] ->
undefined;
[{Key, Res}] ->
Res
end.
get(lager_event, Key, undefined).
get(Key, Default) ->
try ?MODULE:get(Key) of
undefined ->
get(lager_event, Key, Default).
get(Sink, Key, Default) ->
try
case ets:lookup(?TBL, {Sink, Key}) of
[] ->
Default;
Res ->
[{{Sink, Key}, Res}] ->
Res
end
catch
_:_ ->
Default
end.
set(Key, Value) ->
ets:insert(?TBL, {Key, Value}).
set(lager_event, Key, Value).
set(Sink, Key, Value) ->
ets:insert(?TBL, {{Sink, Key}, Value}).

+ 5
- 0
src/lager_sup.erl Datei anzeigen

@ -34,6 +34,11 @@ start_link() ->
init([]) ->
%% set up the config, is safe even during relups
lager_config:new(),
%% TODO:
%% Always start lager_event as the default and make sure that
%% other gen_event stuff can start up as needed
%%
%% Maybe a new API to handle the sink and its policy?
Children = [
{lager, {gen_event, start_link, [{local, lager_event}]},
permanent, 5000, worker, [dynamic]},

Laden…
Abbrechen
Speichern