Quellcode durchsuchen

Replace API for file rotation. Now supports rotate_handler/1,2 to rotate custom handler

pull/311/head
Daniil Fedotov vor 9 Jahren
Ursprung
Commit
c278368a65
2 geänderte Dateien mit 22 neuen und 21 gelöschten Zeilen
  1. +18
    -20
      src/lager.erl
  2. +4
    -1
      test/lager_rotate.erl

+ 18
- 20
src/lager.erl Datei anzeigen

@ -22,13 +22,14 @@
-define(LAGER_MD_KEY, '__lager_metadata').
-define(TRACE_SINK, '__trace_sink').
-define(ROTATE_TIMEOUT, 100000).
%% API
-export([start/0,
log/3, log/4, log/5,
log_unsafe/4,
md/0, md/1,
rotate_file/1, rotate_sink/1, rotate_all/0,
rotate_handler/1, rotate_handler/2, rotate_sink/1, rotate_all/0,
trace/2, trace/3, trace_file/2, trace_file/3, trace_file/4, trace_console/1, trace_console/2,
list_all_sinks/0, clear_all_traces/0, stop_trace/1, stop_trace/3, status/0,
get_loglevel/1, get_loglevel/2, set_loglevel/2, set_loglevel/3, set_loglevel/4, get_loglevels/1,
@ -595,34 +596,31 @@ pr_stacktrace(Stacktrace) ->
pr_stacktrace(Stacktrace, {Class, Reason}) ->
lists:flatten(
pr_stacktrace(Stacktrace) ++ "\n" ++ io_lib:format("~s:~p", [Class, Reason])).
rotate_file(FileName) ->
Handlers = lager_config:global_get(handlers),
RotateHandlers = lists:filter(
fun ({{lager_file_backend, FN}, _, _}) ->
FN == FileName orelse
lager_util:expand_path(FN) == lager_util:expand_path(FileName);
(_) -> false
end,
Handlers),
rotate_handlers(RotateHandlers).
rotate_sink(Sink) ->
Handlers = lager_config:global_get(handlers),
RotateHandlers = lists:filter(
fun({_,_,S}) -> S == Sink;
(_) -> false
RotateHandlers = lists:filtermap(
fun({Handler,_,S}) when S == Sink -> {true, {Handler, Sink}};
(_) -> false
end,
Handlers),
rotate_handlers(RotateHandlers).
rotate_all() ->
rotate_handlers(lager_config:global_get(handlers)).
rotate_handlers(lists:map(fun({H,_,S}) -> {H, S} end,
lager_config:global_get(handlers))).
rotate_handlers(Handlers) ->
[ rotate_handler(Handler) || Handler <- Handlers ].
[ rotate_handler(Handler, Sink) || {Handler, Sink} <- Handlers ].
rotate_handler({Backend, Handler, Sink}) ->
gen_event:call(Sink, Backend, rotate, infinity).
rotate_handler(Handler) ->
Handlers = lager_config:global_get(handlers),
case lists:keyfind(Handler, 1, Handlers) of
{Handler, _, Sink} -> rotate_handler(Handler, Sink);
false -> ok
end.
rotate_handler(Handler, Sink) ->
gen_event:call(Sink, Handler, rotate, ?ROTATE_TIMEOUT).

+ 4
- 1
test/lager_rotate.erl Datei anzeigen

@ -45,7 +45,7 @@ rotate_test_() ->
fun() ->
lager:log(error, self(), "Test message 1"),
lager:log(sink_event, error, self(), "Sink test message 1", []),
lager:rotate_file("test1.log"),
lager:rotate_handler({lager_file_backend, "test1.log"}),
timer:sleep(1000),
true = filelib:is_regular("test1.log.0"),
lager:log(error, self(), "Test message 2"),
@ -119,6 +119,9 @@ rotate_test_() ->
have_no_log(SinkFile, <<"Sink test message 1">>),
have_log(SinkFile, <<"Sink test message 2">>),
have_log(SinkFileOld, <<"Sink test message 1">>),
have_no_log(SinkFileOld, <<"Sink test message 2">>),
have_log(File1Old, <<"Test message 1">>),
have_no_log(File1Old, <<"Test message 2">>),

Laden…
Abbrechen
Speichern