From af3a2d79c4ff38bd72fc4e92d0900a1d925079a6 Mon Sep 17 00:00:00 2001 From: Daniil Fedotov Date: Mon, 11 Jan 2016 13:03:18 +0000 Subject: [PATCH] API to explicitly call log rotation --- src/lager.erl | 24 ++++++++++++++++++++++++ src/lager_file_backend.erl | 8 ++++++++ 2 files changed, 32 insertions(+) diff --git a/src/lager.erl b/src/lager.erl index 9e4b051..aa9e2b5 100644 --- a/src/lager.erl +++ b/src/lager.erl @@ -28,6 +28,7 @@ log/3, log/4, log/5, log_unsafe/4, md/0, md/1, + rotate_file/1, 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, @@ -594,3 +595,26 @@ 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), + lager_file_backend:rotate_handlers(RotateHandlers). + +rotate_sink(Sink) -> + Handlers = lager_config:global_get(handlers), + RotateHandlers = lists:filter( + fun({_,_,S}) -> S == Sink; + (_) -> false + end, + Handlers), + lager_file_backend:rotate_handlers(RotateHandlers). + +rotate_all() -> + lager_file_backend:rotate_handlers(lager_config:global_get(handlers)). \ No newline at end of file diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index 1c18dc4..658fc2b 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -42,6 +42,7 @@ -export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, code_change/3]). +-export([rotate_handlers/1, rotate_handler/1]). -export([config_to_id/1]). @@ -401,6 +402,13 @@ schedule_rotation(Name, Date) -> erlang:send_after(lager_util:calculate_next_rotation(Date) * 1000, self(), {rotate, Name}), ok. +rotate_handlers(Handlers) -> + [ rotate_handler(Handler) || Handler <- Handlers ]. + +rotate_handler({{lager_file_backend, FileName}, Handler, _Sink}) -> + Handler ! {rotate, lager_util:expand_path(FileName)}; +rotate_handler(_) -> ok. + -ifdef(TEST). get_loglevel_test() ->