diff --git a/src/lager.erl b/src/lager.erl index 1d5f3fa..be1d8ba 100644 --- a/src/lager.erl +++ b/src/lager.erl @@ -29,7 +29,7 @@ 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, status/0, get_loglevel/1, set_loglevel/2, set_loglevel/3, get_loglevels/0, - update_loglevel_config/0, posix_error/1, + update_loglevel_config/0, posix_error/1, set_loghwm/2, set_loghwm/3, safe_format/3, safe_format_chop/3, dispatch_log/5, dispatch_log/9, do_log/9, pr/2]). @@ -320,6 +320,14 @@ get_loglevels() -> [gen_event:call(lager_event, Handler, get_loglevel, infinity) || Handler <- gen_event:which_handlers(lager_event)]. +%% @doc Set the loghwm for a particular backend. +set_loghwm(Handler, Hwm) when is_integer(Hwm) -> + gen_event:call(lager_event, Handler, {set_loghwm, Hwm}, infinity). + +%% @doc Set the loghwm (log high water mark) for file backends with multiple identifiers +set_loghwm(Handler, Ident, Hwm) when is_integer(Hwm) -> + gen_event:call(lager_event, {Handler, Ident}, {set_loghwm, Hwm}, infinity). + %% @private add_trace_to_loglevel_config(Trace) -> {MinLevel, Traces} = lager_config:get(loglevel), diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index 8fbcc5c..c19f69a 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -132,6 +132,15 @@ handle_call({set_loglevel, Level}, #state{name=Ident} = State) -> end; handle_call(get_loglevel, #state{level=Level} = State) -> {ok, Level, State}; +handle_call({set_loghwm, Hwm}, #state{shaper=Shaper, name=Name} = State) -> + case validate_logfile_proplist([{file, Name}, {high_water_mark, Hwm}]) of + false -> + {ok, {error, bad_log_hwm}, State}; + _ -> + NewShaper = Shaper#lager_shaper{hwm=Hwm}, + ?INT_LOG(notice, "Changed loghwm of ~s to ~p", [Name, Hwm]), + {ok, {last_loghwm, Shaper#lager_shaper.hwm}, State#state{shaper=NewShaper}} + end; handle_call(_Request, State) -> {ok, ok, State}.