diff --git a/src/error_logger_lager_h.erl b/src/error_logger_lager_h.erl index a61aaec..f393f1f 100644 --- a/src/error_logger_lager_h.erl +++ b/src/error_logger_lager_h.erl @@ -23,6 +23,8 @@ -module(error_logger_lager_h). +-include("lager.hrl"). + -behaviour(gen_event). -export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, @@ -31,14 +33,14 @@ -export([format_reason/1]). -define(LOG(Level, Pid, Msg), - case lager_util:level_to_num(Level) >= lager_mochiglobal:get(loglevel, 0) of + case ?SHOULD_LOG(Level) of true -> lager:log(Level, Pid, Msg); _ -> ok end). -define(LOG(Level, Pid, Fmt, Args), - case lager_util:level_to_num(Level) >= lager_mochiglobal:get(loglevel, 0) of + case ?SHOULD_LOG(Level) of true -> lager:log(Level, Pid, Fmt, Args); _ -> ok diff --git a/src/lager.erl b/src/lager.erl index 68b351a..e986ad1 100644 --- a/src/lager.erl +++ b/src/lager.erl @@ -18,6 +18,8 @@ -module(lager). +-include("lager.hrl"). + %% API -export([start/0, log/7, log/8, log/3, log/4, @@ -93,7 +95,7 @@ set_loglevel(Handler, Ident, Level) when is_atom(Level) -> get_loglevel(Handler) -> case gen_event:call(lager_event, Handler, get_loglevel) of X when is_integer(X) -> - lager_util:num_to_level(X); + ?NUM2LEVEL(X); Y -> Y end. @@ -104,6 +106,6 @@ get_loglevels() -> %% @private minimum_loglevel([]) -> - 9; %% higher than any log level, logging off + -1; %% lower than any log level, logging off minimum_loglevel(Levels) -> - erlang:hd(lists:sort(Levels)). + erlang:hd(lists:reverse(lists:sort(Levels))). diff --git a/src/lager_console_backend.erl b/src/lager_console_backend.erl index 68b263d..5bda01b 100644 --- a/src/lager_console_backend.erl +++ b/src/lager_console_backend.erl @@ -39,7 +39,7 @@ handle_call(_Request, State) -> {ok, ok, State}. %% @private -handle_event({log, Level, Time, Message}, #state{level=LogLevel} = State) when Level >= LogLevel -> +handle_event({log, Level, Time, Message}, #state{level=LogLevel} = State) when Level =< LogLevel -> io:put_chars([Time, " ", Message, "\n"]), {ok, State}; handle_event(_Event, State) -> diff --git a/src/lager_crash_log.erl b/src/lager_crash_log.erl index 3c3a224..11494c1 100644 --- a/src/lager_crash_log.erl +++ b/src/lager_crash_log.erl @@ -22,6 +22,8 @@ -module(lager_crash_log). +-include("lager.hrl"). + -behaviour(gen_server). %% callbacks @@ -37,14 +39,6 @@ flap=false }). --define(LOG(Level, Format, Args), - case lager_util:level_to_num(Level) >= lager_mochiglobal:get(loglevel, 0) of - true -> - gen_event:notify(lager_event, {log, lager_util:level_to_num(Level), - lager_util:format_time(), [io_lib:format("[~p] ~p ", [Level, self()]), io_lib:format(Format, Args)]}); - _ -> ok - end). - %% @private start_link(Filename) -> gen_server:start_link({local, ?MODULE}, ?MODULE, [Filename], []). @@ -93,7 +87,7 @@ handle_cast({log, Event}, #state{name=Name, fd=FD, inode=Inode, flap=Flap} = Sta NodeSuffix = other_node_suffix(Pid), case file:write(NewFD, io_lib:format("~s~s~s", [Time, MsgStr, NodeSuffix])) of {error, Reason} when Flap == false -> - ?LOG(error, "Failed to write log message to file ~s: ~s", [Name, file:format_error(Reason)]), + ?INT_LOG(error, "Failed to write log message to file ~s: ~s", [Name, file:format_error(Reason)]), {noreply, State#state{fd=NewFD, inode=NewInode, flap=true}}; ok -> {noreply, State#state{fd=NewFD, inode=NewInode, flap=false}}; @@ -105,7 +99,7 @@ handle_cast({log, Event}, #state{name=Name, fd=FD, inode=Inode, flap=Flap} = Sta true -> {noreply, State}; _ -> - ?LOG(error, "Failed to reopen logfile ~s with error ~w", [Name, file:format_info(Reason)]), + ?INT_LOG(error, "Failed to reopen logfile ~s with error ~w", [Name, file:format_info(Reason)]), {noreply, State#state{flap=true}} end end diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index b089118..b785886 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -22,6 +22,8 @@ -module(lager_file_backend). +-include("lager.hrl"). + -behaviour(gen_event). -ifdef(TEST). @@ -43,14 +45,6 @@ flap=false :: boolean() }). --define(LOG(Level, Format, Args), - case lager_util:level_to_num(Level) >= lager_mochiglobal:get(loglevel, 0) of - true -> - gen_event:notify(lager_event, {log, lager_util:level_to_num(Level), - lager_util:format_time(), [io_lib:format("[~p] ~p ", [Level, self()]), io_lib:format(Format, Args)]}); - _ -> ok - end). - %% @private init(LogFiles) -> Files = [begin @@ -58,7 +52,7 @@ init(LogFiles) -> {ok, {FD, Inode}} -> #file{name=Name, level=lager_util:level_to_num(Level), fd=FD, inode=Inode}; {error, Reason} -> - ?LOG(error, "Failed to open log file ~s with error ~s", + ?INT_LOG(error, "Failed to open log file ~s with error ~s", [Name, file:format_error(Reason)]), #file{name=Name, level=lager_util:level_to_num(Level), flap=true} end @@ -77,15 +71,15 @@ handle_call({set_loglevel, Ident, Level}, #state{files=Files} = State) -> _ -> NewFiles = lists:map( fun(#file{name=Name} = File) when Name == Ident -> - ?LOG(notice, "Changed loglevel of ~s to ~p", [Ident, Level]), + ?INT_LOG(notice, "Changed loglevel of ~s to ~p", [Ident, Level]), File#file{level=lager_util:level_to_num(Level)}; (X) -> X end, Files), {ok, ok, State#state{files=NewFiles}} end; handle_call(get_loglevel, #state{files=Files} = State) -> - Result = lists:foldl(fun(#file{level=Level}, L) -> erlang:min(Level, L); - (_, L) -> L end, 9, + Result = lists:foldl(fun(#file{level=Level}, L) -> erlang:max(Level, L); + (_, L) -> L end, -1, Files), {ok, Result, State}; handle_call(_Request, State) -> @@ -94,7 +88,7 @@ handle_call(_Request, State) -> %% @private handle_event({log, Level, Time, Message}, #state{files=Files} = State) -> NewFiles = lists:map( - fun(#file{level=L} = File) when Level >= L -> + fun(#file{level=L} = File) when Level =< L -> write(File, Level, [Time, " ", Message, "\n"]); (File) -> File @@ -124,11 +118,11 @@ write(#file{name=Name, fd=FD, inode=Inode, flap=Flap} = File, Level, Msg) -> {ok, {NewFD, NewInode}} -> file:write(NewFD, Msg), case Level of - _ when Level >= 4 -> + _ when Level =< ?ERROR -> %% force a sync on any message at error severity or above Flap2 = case file:datasync(NewFD) of {error, Reason2} when Flap == false -> - ?LOG(error, "Failed to write log message to file ~s: ~s", [Name, file:format_error(Reason2)]), + ?INT_LOG(error, "Failed to write log message to file ~s: ~s", [Name, file:format_error(Reason2)]), true; ok -> false; @@ -144,7 +138,7 @@ write(#file{name=Name, fd=FD, inode=Inode, flap=Flap} = File, Level, Msg) -> true -> File; _ -> - ?LOG(error, "Failed to reopen logfile ~s with error ~s", [Name, file:format_error(Reason)]), + ?INT_LOG(error, "Failed to reopen logfile ~s with error ~s", [Name, file:format_error(Reason)]), File#file{flap=true} end end. @@ -166,18 +160,18 @@ get_loglevel_test() -> rotation_test() -> {ok, {FD, Inode}} = lager_util:open_logfile("test.log", true), - ?assertMatch(#file{name="test.log", level=0, fd=FD, inode=Inode}, - write(#file{name="test.log", level=0, fd=FD, inode=Inode}, 0, "hello world")), + ?assertMatch(#file{name="test.log", level=?DEBUG, fd=FD, inode=Inode}, + write(#file{name="test.log", level=?DEBUG, fd=FD, inode=Inode}, 0, "hello world")), file:delete("test.log"), - Result = write(#file{name="test.log", level=0, fd=FD, inode=Inode}, 0, "hello world"), + Result = write(#file{name="test.log", level=?DEBUG, fd=FD, inode=Inode}, 0, "hello world"), %% assert file has changed - ?assert(#file{name="test.log", level=0, fd=FD, inode=Inode} =/= Result), - ?assertMatch(#file{name="test.log", level=0}, Result), + ?assert(#file{name="test.log", level=?DEBUG, fd=FD, inode=Inode} =/= Result), + ?assertMatch(#file{name="test.log", level=?DEBUG}, Result), file:rename("test.log", "test.log.1"), Result2 = write(Result, 0, "hello world"), %% assert file has changed ?assert(Result =/= Result2), - ?assertMatch(#file{name="test.log", level=0}, Result2), + ?assertMatch(#file{name="test.log", level=?DEBUG}, Result2), ok. -endif. diff --git a/src/lager_transform.erl b/src/lager_transform.erl index c575ac5..5eaa544 100644 --- a/src/lager_transform.erl +++ b/src/lager_transform.erl @@ -22,10 +22,10 @@ %% nothing wishes to consume the message. -module(lager_transform). --export([parse_transform/2]). --define(LEVELS, [debug, info, notice, warning, error, critical, alert, - emergency]). +-include("lager.hrl"). + +-export([parse_transform/2]). %% @private parse_transform(AST, _Options) -> @@ -63,11 +63,11 @@ transform_statement({call, Line, {remote, Line1, {atom, Line2, lager}, %% a case to check the mochiglobal 'loglevel' key against the %% message we're trying to log {'case',Line, - {op,Line,'=<', + {op,Line,'>=', {call,Line, {remote,Line,{atom,Line,lager_mochiglobal},{atom,Line,get}}, [{atom,Line,loglevel},{integer,Line,0}]}, - {integer, Line, lager_util:level_to_num(Severity)}}, + {integer, Line, ?LEVEL2NUM(Severity)}}, [{clause,Line, [{atom,Line,true}], %% yes, we log! [], diff --git a/src/lager_util.erl b/src/lager_util.erl index b4a9f9d..91cfbe1 100644 --- a/src/lager_util.erl +++ b/src/lager_util.erl @@ -24,23 +24,23 @@ levels() -> [debug, info, notice, warning, error, critical, alert, emergency]. -level_to_num(debug) -> 0; -level_to_num(info) -> 1; -level_to_num(notice) -> 2; -level_to_num(warning) -> 3; -level_to_num(error) -> 4; -level_to_num(critical) -> 5; -level_to_num(alert) -> 6; -level_to_num(emergency) -> 7. +level_to_num(debug) -> 7; +level_to_num(info) -> 6; +level_to_num(notice) -> 5; +level_to_num(warning) -> 4; +level_to_num(error) -> 3; +level_to_num(critical) -> 2; +level_to_num(alert) -> 1; +level_to_num(emergency) -> 0. -num_to_level(0) -> debug; -num_to_level(1) -> info; -num_to_level(2) -> notice; -num_to_level(3) -> warning; -num_to_level(4) -> error; -num_to_level(5) -> critical; -num_to_level(6) -> alert; -num_to_level(7) -> emergency. +num_to_level(7) -> debug; +num_to_level(6) -> info; +num_to_level(5) -> notice; +num_to_level(4) -> warning; +num_to_level(3) -> error; +num_to_level(2) -> critical; +num_to_level(1) -> alert; +num_to_level(0) -> emergency. open_logfile(Name, Buffer) -> case filelib:ensure_dir(Name) of diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index 3ad96bd..bcaca17 100644 --- a/test/lager_test_backend.erl +++ b/test/lager_test_backend.erl @@ -16,6 +16,8 @@ -module(lager_test_backend). +-include("lager.hrl"). + -behaviour(gen_event). -export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, @@ -52,7 +54,7 @@ handle_call(_Request, State) -> {ok, ok, State}. handle_event({log, Level, Time, Message}, #state{level=LogLevel, - buffer=Buffer} = State) when Level >= LogLevel -> + buffer=Buffer} = State) when Level =< LogLevel -> {ok, State#state{buffer=Buffer ++ [{Level, Time, Message}]}}; handle_event({log, _Level, _Time, _Message}, #state{ignored=Ignored} = State) -> {ok, State#state{ignored=Ignored ++ [ignored]}}; @@ -155,7 +157,7 @@ lager_test_() -> lager:debug("this message will be ignored"), ?assertEqual(0, count()), ?assertEqual(0, count_ignored()), - lager_mochiglobal:put(loglevel, 0), + lager_mochiglobal:put(loglevel, ?DEBUG), lager:debug("this message should be ignored"), ?assertEqual(0, count()), ?assertEqual(1, count_ignored()), @@ -553,7 +555,7 @@ error_logger_redirect_test_() -> ?assertEqual(1, count()), ?assertEqual(0, count_ignored()), lager:set_loglevel(?MODULE, error), - lager_mochiglobal:put(loglevel, 0), + lager_mochiglobal:put(loglevel, ?DEBUG), error_logger:info_report([hello, world]), timer:sleep(100), ?assertEqual(1, count()),