$$ terminal_logger1.erl
-module(terminal_logger1). -behaviour(gen_event). -export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]). init(_Args) -> {ok, []}. handle_event(ErrorMsg, State) -> io:format("*** Error1 *** ~p~n", [ErrorMsg]), {ok, State}. handle_call(_Request, _State) -> {ok, [], []}. handle_info(_Info, _State) -> {ok, []}. code_change(_OlvVsn, _State, _Extra) -> ok. terminate(_Args, _State) -> ok.
$$ terminal_logger2.erl
-module(terminal_logger2). -behaviour(gen_event). -export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]). init(_Args) -> {ok, []}. handle_event(ErrorMsg, State) -> io:format("*** Error2 *** ~p~n", [ErrorMsg]), {ok, State}. handle_call(_Request, _State) -> {ok, [], []}. handle_info(_Info, _State) -> {ok, []}. code_change(_OlvVsn, _State, _Extra) -> ok. terminate(_Args, _State) -> ok.
$$ terminal_logger3.erl
-module(terminal_logger3). -behaviour(gen_event). -export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]). init(_Args) -> {ok, []}. handle_event(ErrorMsg, State) -> io:format("*** Error3 *** ~p~n", [ErrorMsg]), {ok, State}. handle_call(_Request, _State) -> {ok, [], []}. handle_info(_Info, _State) -> {ok, []}. code_change(_OlvVsn, _State, _Extra) -> ok. terminate(_Args, _State) -> ok.
编译:
Eshell> c(terminal_logger1). Eshell> c(terminal_logger2). Eshell> c(terminal_logger3).
运行:
D:\erl\code>erl Eshell V5.6.3 (abort with ^G) 1> gen_event:start_link({local, error_man}). {ok,<0.31.0>} 2> gen_event:add_handler(error_man, terminal_logger1, []). ok 3> gen_event:add_handler(error_man, terminal_logger2, []). ok 4> gen_event:add_handler(error_man, terminal_logger3, []). ok 5> gen_event:which_handlers(error_man). [terminal_logger3,terminal_logger2,terminal_logger1] 6> gen_event:notify(error_man, "Hideto"). *** Error3 *** "Hideto" ok *** Error2 *** "Hideto" 7> *** Error1 *** "Hideto" 7>