[erlang-questions] SASL event handler problem

6 views
Skip to first unread message

Ivan Ostres

unread,
Dec 28, 2011, 8:24:56 AM12/28/11
to erlang-q...@erlang.org
Hi all,

I am trying to make a custom SASL handler (gen_event) as follows:

-module(logger_event).
-behaviour(gen_event).
%% API
-export([start_link/0, register_with_logger/0, unregister_with_logger/0]).
%% gen_event callbacks
-export([init/1, handle_event/2, handle_call/2,
handle_info/2, terminate/2, code_change/3]).
-define(SERVER, ?MODULE).
-record(state, {}).

start_link() ->
gen_event:start_link({local, ?SERVER}).
register_with_logger() ->
error_logger:add_report_handler(?MODULE).
init([]) ->
{ok, #state{}}.

handle_event({info_report,_Gleader, {Pid, Type, Report}}, State) ->
io:fwrite("INFO <~p> ~p ~p~n",[Pid, Type, Report]),
{ok, State};
handle_event(_Event, State) ->
io:fwrite("ERR unknown event ~p~n",[_Event]),
{ok, State}.

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}.

The problem is that I get different results for following cases:

Eshell V5.8.5 (abort with ^G)
(emacs@myerl)1> logger_event:start_link().
{ok,<0.39.0>}
(emacs@myerl)2> logger_event:register_with_logger().
ok
(emacs@myerl)3> error_logger:info_report("test1").
INFO <<0.37.0>> std_info "test1"

=INFO REPORT==== 28-Dec-2011::14:23:07 ===
test1
ok
(emacs@myerl)4> error_logger:info_report("test~p",2).
INFO <<0.37.0>> "test~p" 2
ok
(emacs@myerl)5>


The problem is that for std_info (error_logger:info_report/1) I get both
"my" version of log and standard log, while for
(error_logger:info_report/2) I get just my version of log.

Please help,
Ivan
_______________________________________________
erlang-questions mailing list
erlang-q...@erlang.org
http://erlang.org/mailman/listinfo/erlang-questions

Ivan Ostres

unread,
Dec 28, 2011, 9:25:40 AM12/28/11
to Siri Hansen, erlang-q...@erlang.org
Hi Siri,

thanks for the answer - I definitely mixed info_report with info_msg :-(.

BR,
Ivan

On 12/28/11 3:10 PM, Siri Hansen wrote:
> Hi Ivan!
>
> The arguments for error_logger:info_report/2 shall be Type and Report,
> not a format string and data. The documentation says:
>
> "info_report(Type, Report) -> ok
>
> Types:
>
> Type = any()
> Report = report()
>
> Sends a user defined information report event to the error logger. An
> event handler to handle the event is supposed to have been added. *The
> event is ignored by the standard event handler*.
>
> It is recommended that Report follows the same structure as for
> info_report/1."
>
> In fact, if you give 'std_info' as Type to the call, then the standard
> event handler will handle the report (equivalent to
> error_logger:info_report/1), else it will be ignored.
>
> What you might be looking for is actually error_logger:info_msg/2 -
> which takes a format string and data.
>
> Regards
> /siri
>
>
> 2011/12/28 Ivan Ostres <ios...@live.com <mailto:ios...@live.com>>

> erlang-q...@erlang.org <mailto:erlang-q...@erlang.org>
> http://erlang.org/mailman/listinfo/erlang-questions

Reply all
Reply to author
Forward
0 new messages