From 31cf6c02a9cd6a4ae9680b00202d07abf81212c1 Mon Sep 17 00:00:00 2001 From: Mark Allen Date: Thu, 21 May 2015 16:26:23 -0500 Subject: [PATCH] Check configuration as suggested in gh#253 Previously bad configurations would be silently ignored. Now they will throw an error tuple. --- src/lager_app.erl | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/lager_app.erl b/src/lager_app.erl index 96db4fc..d2d5451 100644 --- a/src/lager_app.erl +++ b/src/lager_app.erl @@ -81,7 +81,9 @@ start_handlers(Sink, Handlers) -> lager_config:global_get(handlers, []) ++ lists:map(fun({Module, Config}) -> check_handler_config(Module, Config), - start_handler(Sink, Module, Config) + start_handler(Sink, Module, Config); + (_) -> + throw({error, bad_config}) end, expand_handlers(Handlers))), ok. @@ -91,7 +93,7 @@ start_handler(Sink, Module, Config) -> [Sink, Module, Config]), {Module, Watcher, Sink}. -check_handler_config({lager_file_backend, F}, _Config) -> +check_handler_config({lager_file_backend, F}, Config) when is_list(Config) -> Fs = case get(?FILENAMES) of undefined -> ordsets:new(); X -> X @@ -106,9 +108,10 @@ check_handler_config({lager_file_backend, F}, _Config) -> ordsets:add_element(F, Fs)) end, ok; - -check_handler_config(_Other, _Config) -> - ok. +check_handler_config(_Handler, Config) when is_list(Config) orelse is_atom(Config) -> + ok; +check_handler_config(Handler, _BadConfig) -> + throw({error, {bad_config, Handler}}). clean_up_config_checks() -> erase(?FILENAMES). @@ -332,12 +335,24 @@ check_handler_config_test_() -> Bad = expand_handlers([{lager_console_backend, info}, {lager_file_backend, [{file, "same_file.log"}]}, {lager_file_backend, [{file, "same_file.log"}, {level, info}]}]), + AlsoBad = [{lager_logstash_backend, + {level, info}, + {output, {udp, "localhost", 5000}}, + {format, json}, + {json_encoder, jiffy}}], + BadToo = [{fail, {fail}}], [ {"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 ]) + }, + {"Invalid config dies", + ?_assertThrow({error, bad_config}, start_handlers(foo, AlsoBad)) + }, + {"Invalid config dies", + ?_assertThrow({error, {bad_config, _}}, start_handlers(foo, BadToo)) } ]. -endif.