forked from ahmednawras/log4erl
/
console_appender.erl
73 lines (63 loc) · 2.03 KB
/
console_appender.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-module(console_appender).
-include("../include/log4erl.hrl").
-behaviour(gen_event).
%% gen_event callbacks
-export([init/1, handle_event/2, handle_call/2,
handle_info/2, terminate/2, code_change/3]).
init({conf, Conf}) when is_list(Conf) ->
CL = lists:foldl(fun(X, List) ->
[proplists:get_value(X,Conf)|List]
end,
[],
[level, format]),
%% in case format doesn't exist
Res = case hd(CL) of
undefined ->
[_|CL2] = CL,
lists:reverse(CL2);
_ ->
lists:reverse(CL)
end,
init(list_to_tuple(Res));
init({Level}) ->
init({Level, ?DEFAULT_FORMAT});
init({Level, Format} = _Args) ->
?LOG2("Initializing console_appender with args = ~p~n",[_Args]),
{ok, Toks} = log_formatter:parse(Format),
?LOG2("Tokens received is ~p",[Toks]),
State = #console_appender{level = Level, format = Toks},
?LOG2("State is ~p",[State]),
{ok, State}.
handle_event({change_level, Level}, State) ->
State2 = State#console_appender{level = Level},
?LOG2("Changed level to ~p~n",[Level]),
{ok, State2};
handle_event({log,LLog}, State) ->
?LOG2("handl_event:log = ~p~n",[LLog]),
do_log(LLog, State),
{ok, State}.
handle_call({change_format, Format}, State) ->
?LOG2("Old State in console_appender is ~p~n",[State]),
{ok, Tokens} = log_formatter:parse(Format),
?LOG2("Adding format of ~p~n",[Tokens]),
State1 = State#console_appender{format=Tokens},
{ok, ok, State1};
handle_call(_Request, State) ->
Reply = ok,
{ok, Reply, State}.
handle_info(_Info, State) ->
{ok, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
do_log(#log{level = L} = Log,#console_appender{level=Level, format=Format}) ->
ToLog = log4erl_utils:to_log(L, Level),
case ToLog of
true ->
M = log_formatter:format(Log, Format),
?LOG2("console_appender result message is ~s~n",[M]),
io:format(M);
false ->
ok
end.