From 12fa1977bbcc02184b6b45b77d4d52faf0a006d0 Mon Sep 17 00:00:00 2001 From: Mark Allen Date: Fri, 25 Mar 2016 16:42:16 -0500 Subject: [PATCH] Ensure traces pointed to files work in config file --- src/lager_app.erl | 10 ++++--- src/lager_file_backend.erl | 55 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/lager_app.erl b/src/lager_app.erl index ebbf330..15efd3f 100644 --- a/src/lager_app.erl +++ b/src/lager_app.erl @@ -256,12 +256,14 @@ add_configured_traces() -> TraceVal end, - lists:foreach(fun({Handler, Filter, Level}) -> - {ok, _} = lager:trace(Handler, Filter, Level) - end, - Traces), + lists:foreach(fun start_configured_trace/1, Traces), ok. +start_configured_trace({Handler, Filter}) -> + {ok, _} = lager:trace(Handler, Filter); +start_configured_trace({Handler, Filter, Level}) when is_atom(Level) -> + {ok, _} = lager:trace(Handler, Filter, Level). + maybe_make_handler_id(Mod, Config) -> %% Allow the backend to generate a gen_event handler id, if it wants to. %% We don't use erlang:function_exported here because that requires the module diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index a0fd225..10ce9c7 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -799,6 +799,61 @@ filesystem_test_() -> ] }. +trace_files_test_() -> + {foreach, + fun() -> + file:delete("events.log"), + file:delete("test.log"), + file:delete("debug.log"), + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, [{lager_file_backend, [{file, "test.log"}, + {level, error}, + {formatter, lager_default_formatter}, + {formatter_config, [message, "\n"]}]}]), + application:set_env(lager, traces, [ + { % get default level of debug + {lager_file_backend, "debug.log"}, [{module, ?MODULE}] + }, + { % Handler Filters Level + {lager_file_backend, "events.log"}, [{module, ?MODULE}], notice + } + ] + ), + application:set_env(lager, async_threshold, undefined), + lager:start() + end, + fun(_) -> + application:stop(lager), + file:delete("events.log"), + file:delete("test.log"), + file:delete("debug.log"), + error_logger:tty(true) + end, + [ + {"a trace using file backend set up in configuration should work", + fun() -> + lager:error("trace test error message"), + lager:info("info message"), + %% not eligible for trace + lager:log(error, self(), "Not trace test message"), + {ok, BinInfo} = file:read_file("events.log"), + ?assertMatch([_, _, "[error]", _, "trace test error message\n"], + re:split(BinInfo, " ", [{return, list}, {parts, 5}])), + ?assert(filelib:is_regular("test.log")), + {ok, BinInfo2} = file:read_file("test.log"), + ?assertMatch(["trace test error message", "Not trace test message\n"], + re:split(BinInfo2, "\n", [{return, list}, {parts, 2}])), + ?assert(filelib:is_regular("debug.log")), + %% XXX Aughhhh, wish I could force this to flush somehow... + timer:sleep(1000), + {ok, BinInfo3} = file:read_file("debug.log"), + ?assertEqual(2, length(re:split(BinInfo3, "\n", [{return, list}, trim]))) + end + } + ] + }. + formatting_test_() -> {foreach, fun() ->