소스 검색

Add check for same file across backends.

Throw {error, bad_config} if we find one during
handler startup.
pull/264/head
Mark Allen 10 년 전
부모
커밋
4da506b06b
1개의 변경된 파일40개의 추가작업 그리고 0개의 파일을 삭제
  1. +40
    -0
      src/lager_app.erl

+ 40
- 0
src/lager_app.erl 파일 보기

@ -30,6 +30,7 @@
start_handler/3,
stop/1]).
-define(FILENAMES, '__lager_file_backend_filenames').
-define(THROTTLE, lager_backend_throttle).
-define(DEFAULT_HANDLER_CONF,
[{lager_console_backend, info},
@ -79,6 +80,7 @@ start_handlers(Sink, Handlers) ->
lager_config:global_set(handlers,
lager_config:global_get(handlers, []) ++
lists:map(fun({Module, Config}) ->
check_handler_config(Module, Config),
start_handler(Sink, Module, Config)
end,
expand_handlers(Handlers))),
@ -89,6 +91,28 @@ start_handler(Sink, Module, Config) ->
[Sink, Module, Config]),
{Module, Watcher, Sink}.
check_handler_config({lager_file_backend, F}, _Config) ->
Fs = case get(?FILENAMES) of
undefined -> ordsets:new();
X -> X
end,
case ordsets:is_element(F, Fs) of
true ->
error_logger:error_msg(
"Cannot have same file (~p) in multiple file backends~n", [F]),
throw({error, bad_config});
false ->
put(?FILENAMES,
ordsets:add_element(F, Fs))
end,
ok;
check_handler_config(_Other, _Config) ->
ok.
clean_up_config_checks() ->
erase(?FILENAMES).
interpret_hwm(undefined) ->
undefined;
interpret_hwm({ok, undefined}) ->
@ -166,6 +190,8 @@ start(_StartType, _StartArgs) ->
%% Now handle extra sinks
configure_extra_sinks(application:get_env(lager, extra_sinks, [])),
clean_up_config_checks(),
{ok, Pid, SavedHandlers}.
@ -280,4 +306,18 @@ application_config_mangling_test_() ->
)
}
].
check_handler_config_test_() ->
Good = expand_handlers(?DEFAULT_HANDLER_CONF),
Bad = expand_handlers([{lager_console_backend, info},
{lager_file_backend, [{file, "same_file.log"}]},
{lager_file_backend, [{file, "same_file.log"}, {level, info}]}]),
[
{"lager_file_backend_good",
?_assertEqual([ok, ok, ok], [ check_handler_config(M,C) || {M,C} <- Good ])
},
{"lager_file_backend_bad",
?_assertThrow({error, bad_config}, [ check_handler_config(M,C) || {M,C} <- Bad ])
}
].
-endif.

불러오는 중...
취소
저장