浏览代码

Make logging not crash when lager is not running

pull/4/head
Andrew Thompson 14 年前
父节点
当前提交
077f218cd9
共有 4 个文件被更改,包括 20 次插入10 次删除
  1. +2
    -1
      include/lager.hrl
  2. +14
    -8
      src/lager.erl
  3. +1
    -1
      src/lager_transform.erl
  4. +3
    -0
      test/lager_test_backend.erl

+ 2
- 1
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),

+ 14
- 8
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.

+ 1
- 1
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!

+ 3
- 0
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,

正在加载...
取消
保存