添加事件处理器

以下例子使用了一个命令行演示了如何启动事件管理器并添加一个事件处理器:

  1. 1> gen_event:start({local, error_man}).
  2. {ok,<0.31.0>}
  3. 2> gen_event:add_handler(error_man, terminal_logger, []).
  4. ok

这函数给注册为 error_man 的事件管理器发送了一个消息,告诉它要添加事件处理器 terminal_logger 。这个事件管理器会调用回调函数 terminal_logger:init([]) ,其中参数[]是传给 add_handler 的第三个参数。 init 要返回 {ok,State} ,其中 State 是事件处理器的内部状态。

  1. init(_Args) ->
  2. {ok, []}.

这里, init 无须任何输入数据并忽略了它的参数。同样,对于 terminal_logger 来说内部状态也是用不到的。对于 file_logger 来说,内部状态用于保存打开的文件描述符。

  1. init(_Args) ->
  2. {ok, Fd} = file:open(File, read),
  3. {ok, Fd}.