diff --git a/include/lager.hrl b/include/lager.hrl index f944b9d..3535ac7 100644 --- a/include/lager.hrl +++ b/include/lager.hrl @@ -25,6 +25,7 @@ -define(CRITICAL, 2). -define(ALERT, 1). -define(EMERGENCY, 0). +-define(LOG_NONE, -1). -define(LEVEL2NUM(Level), case Level of @@ -51,7 +52,7 @@ end). -define(SHOULD_LOG(Level), - ?LEVEL2NUM(Level) =< lager_mochiglobal:get(loglevel, ?DEBUG)). + ?LEVEL2NUM(Level) =< lager_mochiglobal:get(loglevel, ?LOG_NONE)). %% internal non-blocking logging call -define(INT_LOG(Level, Format, Args), diff --git a/src/lager.erl b/src/lager.erl index a11b554..efa1030 100644 --- a/src/lager.erl +++ b/src/lager.erl @@ -48,30 +48,26 @@ log(Level, Module, Function, Line, Pid, Time, Message) -> Timestamp = lager_util:format_time(Time), Msg = [io_lib:format("[~p] ~p@~p:~p:~p ", [Level, Pid, Module, Function, Line]), string:strip(lists:flatten(Message), right, $\n)], - gen_event:sync_notify(lager_event, {log, lager_util:level_to_num(Level), - Timestamp, Msg}). + safe_notify(lager_util:level_to_num(Level), Timestamp, Msg). %% @private log(Level, Module, Function, Line, Pid, Time, Format, Args) -> Timestamp = lager_util:format_time(Time), Msg = [io_lib:format("[~p] ~p@~p:~p:~p ", [Level, Pid, Module, Function, Line]), string:strip(lists:flatten(io_lib:format(Format, Args)), right, $\n)], - gen_event:sync_notify(lager_event, {log, lager_util:level_to_num(Level), - Timestamp, Msg}). + safe_notify(lager_util:level_to_num(Level), Timestamp, Msg). %% @doc Manually log a message into lager without using the parse transform. log(Level, Pid, Message) -> Timestamp = lager_util:format_time(), Msg = [io_lib:format("[~p] ~p ", [Level, Pid]), string:strip(lists:flatten(Message), right, $\n)], - gen_event:sync_notify(lager_event, {log, lager_util:level_to_num(Level), - Timestamp, Msg}). + safe_notify(lager_util:level_to_num(Level), Timestamp, Msg). %% @doc Manually log a message into lager without using the parse transform. log(Level, Pid, Format, Args) -> Timestamp = lager_util:format_time(), Msg = [io_lib:format("[~p] ~p ", [Level, Pid]), string:strip(lists:flatten(io_lib:format(Format, Args)), right, $\n)], - gen_event:sync_notify(lager_event, {log, lager_util:level_to_num(Level), - Timestamp, Msg}). + safe_notify(lager_util:level_to_num(Level), Timestamp, Msg). %% @doc Set the loglevel for a particular backend. set_loglevel(Handler, Level) when is_atom(Level) -> @@ -109,3 +105,13 @@ minimum_loglevel([]) -> -1; %% lower than any log level, logging off minimum_loglevel(Levels) -> erlang:hd(lists:reverse(lists:sort(Levels))). + +safe_notify(Level, Timestamp, Msg) -> + case whereis(lager_event) of + undefined -> + %% lager isn't running + {error, lager_not_running}; + Pid -> + gen_event:sync_notify(Pid, {log, Level, Timestamp, Msg}) + end. + diff --git a/src/lager_transform.erl b/src/lager_transform.erl index 60e18f5..3fb668b 100644 --- a/src/lager_transform.erl +++ b/src/lager_transform.erl @@ -67,7 +67,7 @@ transform_statement({call, Line, {remote, Line1, {atom, Line2, lager}, {op,Line,'>=', {call,Line, {remote,Line,{atom,Line,lager_mochiglobal},{atom,Line,get}}, - [{atom,Line,loglevel},{integer,Line,0}]}, + [{atom,Line,loglevel},{integer,Line,?LOG_NONE}]}, {integer, Line, ?LEVEL2NUM(Severity)}}, [{clause,Line, [{atom,Line,true}], %% yes, we log! diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index aef0e69..a6144d9 100644 --- a/test/lager_test_backend.erl +++ b/test/lager_test_backend.erl @@ -81,6 +81,9 @@ count() -> count_ignored() -> gen_event:call(lager_event, ?MODULE, count_ignored). +not_running_test() -> + ?assertEqual({error, lager_not_running}, lager:log(info, wtf, "not running")). + lager_test_() -> {foreach, fun setup/0,