Merge pull request #37 from basho/adt-fix-atom-leak
Fix atom leak
diff --git a/src/lager.erl b/src/lager.erl
index da6d241..927b166 100644
--- a/src/lager.erl
+++ b/src/lager.erl
@@ -27,7 +27,7 @@
clear_all_traces/0, stop_trace/1, status/0,
get_loglevel/1, set_loglevel/2, set_loglevel/3, get_loglevels/0,
minimum_loglevel/1, posix_error/1,
- safe_format/3, safe_format_chop/3]).
+ safe_format/3, safe_format_chop/3,dispatch_log/8]).
-type log_level() :: debug | info | notice | warning | error | critical | alert | emergency.
-type log_level_number() :: 0..7.
@@ -51,6 +51,32 @@
start_ok(App, {error, Reason}) ->
erlang:error({app_start_failed, App, Reason}).
+
+-spec dispatch_log(log_level(), atom(), atom(), pos_integer(), pid(), list(), string(), list()) ->
+ ok | {error, lager_not_running}.
+
+dispatch_log(Severity, Module, Function, Line, Pid, Traces, Format, Args) ->
+ {LevelThreshold,TraceFilters} = lager_mochiglobal:get(loglevel,{?LOG_NONE,[]}),
+ Result=
+ case LevelThreshold >= lager_util:level_to_num(Severity) of
+ true -> lager:log(Severity,Module,Function,Line,Pid,
+ lager_util:maybe_utc(lager_util:localtime_ms()),
+ Format,Args);
+ _ -> ok
+ end,
+ case TraceFilters of
+ [] -> Result;
+ Match when is_list(Match) ->
+ lager:log_dest(Severity,Module,Function,Line,Pid,
+ lager_util:maybe_utc(lager_util:localtime_ms()),
+ lager_util:check_traces(Traces,
+ lager_util:level_to_num(Severity),
+ TraceFilters,
+ []),
+ Format,Args);
+ _ -> ok
+ end.
+
%% @private
-spec log(log_level(), atom(), atom(), pos_integer(), pid(), tuple(), string(), list()) ->
ok | {error, lager_not_running}.
diff --git a/src/lager_transform.erl b/src/lager_transform.erl
index 7947abb..7b41b9f 100644
--- a/src/lager_transform.erl
+++ b/src/lager_transform.erl
@@ -73,9 +73,9 @@
{call, Line, {atom, Line, pid_to_list}, [
{call, Line, {atom, Line ,self}, []}]}]},
{nil, Line}}}}},
- {Traces, Arguments} = case Arguments0 of
+ {Traces, Message, Arguments} = case Arguments0 of
[Format] ->
- {DefaultAttrs, [Format, {nil, Line}]};
+ {DefaultAttrs, Format, {nil, Line}};
[Arg1, Arg2] ->
%% some ambiguity here, figure out if these arguments are
%% [Format, Args] or [Attr, Format].
@@ -84,86 +84,28 @@
case Arg1 of
{cons, _, {tuple, _, _}, _} ->
{concat_lists(Arg1, DefaultAttrs),
- [Arg2, {nil,Line}]};
+ Arg2, {nil,Line}};
_ ->
- {DefaultAttrs, [Arg1, Arg2]}
+ {DefaultAttrs, Arg1, Arg2}
end;
[Attrs, Format, Args] ->
- {concat_lists(Attrs, DefaultAttrs), [Format, Args]}
+ {concat_lists(Attrs, DefaultAttrs), Format, Args}
end,
- %% a case to check the mochiglobal 'loglevel' key against the
- %% message we're trying to log
- LevelVar = list_to_atom("Level" ++ atom_to_list(get(module)) ++
- integer_to_list(Line)),
- TraceVar = list_to_atom("Traces" ++atom_to_list(get(module)) ++
- integer_to_list(Line)),
- MatchVar = list_to_atom("X" ++ atom_to_list(get(module)) ++
- integer_to_list(Line)),
- ResultVar = list_to_atom("Res" ++ atom_to_list(get(module)) ++
- integer_to_list(Line)),
- {block, Line, [
- {match,Line, {tuple,Line,[{var,Line,LevelVar},{var,Line,TraceVar}]},
- {call,Line, {remote,Line,{atom,Line,lager_mochiglobal},{atom,Line,get}},
- [{atom,Line,loglevel},
- {tuple,Line,
- [{integer,Line,?LOG_NONE}, {nil,Line}]}]}},
- {match, Line,
- {var, Line, ResultVar},
- {'case',Line,
- {op,Line,'>=',
- {var, Line, LevelVar},
- {integer, Line, lager_util:level_to_num(Severity)}},
- [{clause,Line,
- [{atom,Line,true}], %% yes, we log!
- [],
- [{call, Line, {remote, Line1, {atom, Line2, lager},
- {atom, Line3, log}}, [
- {atom, Line3, Severity},
- {atom, Line3, get(module)},
- {atom, Line3, get(function)},
- {integer, Line3, Line},
- {call, Line3, {atom, Line3 ,self}, []},
- {call, Line3, {remote, Line3,
- {atom, Line3 ,lager_util},
- {atom,Line3,maybe_utc}},
- [{call,Line3,{remote,Line3,
- {atom,Line3,lager_util},
- {atom,Line3,localtime_ms}},[]}]}
- | Arguments
- ]}]},
- %% No, don't log
- {clause,Line3,[{var,Line3,'_'}],[],[{atom,Line3,ok}]}]}},
- {'case', Line, {var, Line3, TraceVar},
- [{clause, Line3, [{nil, Line3}], [], [{var, Line3, ResultVar}]},
- {clause, Line3, [{var, Line3, MatchVar}],
- [[{call,1,{atom,1,is_list},[{var,1,MatchVar}]}]],
- [{call, Line, {remote, Line1, {atom, Line2, lager},
- {atom, Line3, log_dest}}, [
- {atom, Line3, Severity},
- {atom, Line3, get(module)},
- {atom, Line3, get(function)},
- {integer, Line3, Line},
- {call, Line3, {atom, Line3 ,self}, []},
- {call, Line3, {remote, Line3,
- {atom, Line3 ,lager_util},
- {atom,Line3,maybe_utc}},
- [{call,Line3,{remote,Line3,
- {atom,Line3,lager_util},
- {atom,Line3,localtime_ms}},[]}]},
- {call, Line3, {remote, Line3,
- {atom, Line3, lager_util},
- {atom, Line3, check_traces}},
- [Traces,
- {integer, Line3,
- lager_util:level_to_num(Severity)},
- {var, Line3, TraceVar},
- {nil, Line3}]}
- | Arguments
- ]}]},
- {clause, Line3, [{var, Line3, '_'}], [], [{var,
- Line3, ResultVar}]}
- ]}
- ]};
+ {block, Line,
+ [
+ {call, Line, {remote, Line, {atom,Line1,lager},{atom,Line2,dispatch_log}},
+ [
+ {atom, Line3, Severity},
+ {atom, Line3, get(module)},
+ {atom, Line3, get(function)},
+ {integer, Line3, Line},
+ {call, Line3, {atom, Line3 ,self}, []},
+ Traces,
+ Message,
+ Arguments
+ ]
+ }
+ ]}; % block contents
false ->
Stmt
end;