gen_event例子:terminal_logger

本文介绍如何使用Erlang编写三个不同的终端日志管理器,并通过gen_event行为实现错误消息的日志记录功能。文章展示了如何定义、编译及运行这些日志管理器,并演示了当通知错误信息时它们是如何工作的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义三个terminal_logger:
$$ terminal_logger1.erl
[code]
-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.
[/code]
$$ terminal_logger2.erl
[code]
-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.
[/code]
$$ terminal_logger3.erl
[code]
-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.
[/code]

编译:
[code]
Eshell> c(terminal_logger1).
Eshell> c(terminal_logger2).
Eshell> c(terminal_logger3).
[/code]

运行:
[code]
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>
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值