《Erlang/OTP并发编程实战》第七章 Erlang/OTP 中的日志与事件处理

  1. SASL:System Architecture Support Libraries(系统架构支撑库)。
  2. 日志级别:
    1. critical 或 severe:表示系统遭遇了灾难性故障或者客户已无法访问系统,此时应立即采取人工措施。
    2. error:告知系统运维人员系统中出现了一些不良状况,但并不严重。
    3. warn:告知运维人员系统中出现了某些潜在的负面问题,但暂时无害。
    4. info:表示一条通告性消息,用于将某个事件的发生告知给运维人员。
    5. debug:提供各种巨细信息。
  3. 标准日志函数:
    error_logger:error_msg(Format, Data).
    error_logger:warning_msg(Format, Data).
    error_logger:info_msg(Format, Data).
    
    error_logger:error_report(Type, Report).
    error_logger:warning_report(Type, Report).
    error_logger:info_report(Type, Report).

     

  4. SASL:
    application:start(sasl).

    在 OTP 无关项目中,启动 SASL 往往没有效果,可以用 proc_lib:spawn/1 来启动进程。
    因为 proc_lib 模块是 Erlang stdlib 应用的一部分,利用它可以按 OTP 的方式来启动进程,它会按照 OTP 的一些必要规范对进程进行设置。

  5. gen_event:
    sc_event:

    -module(sc_event).
    
    -export([start_link/0, add_handler/2, delete_handler/2, lookup/1, create/2, replace/2, delete/1]).
    
    -define(SERVER, ?MODULE).
    
    start_link() ->
      gen_event:start_link({local, ?SERVER}).
    
    add_handler(Handler, Args) ->
      gen_event:add_handler(?SERVER, Handler, Args).
    
    delete_handler(Handler, Args) ->
      gen_event:delete(?SERVER, Handler, Args).
    
    lookup(Key) ->
      gen_event:notify(?SERVER, {lookup, Key}).
    
    create(Key, Value) ->
      gen_event:notify(?SERVER, {create, {Key, Value}}).
    
    replace(Key, Value) ->
      gen_event:notify(?SERVER, {replace, {Key, Value}}).
    
    delete(Key) ->
      gen_event:notify(?SERVER, {delete, Key}).

    sc_event_logger:

    -module(sc_event_logger).
    
    -behavior(gen_event).
    
    %% API
    -export([add_handler/0, delete_handler/0]).
    
    -export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]).
    
    add_handler() ->
      sc_event:add_handler(?MODULE, []).
    
    delete_handler() ->
      sc_event:delete_handler(?MODULE, []).
    
    handle_event({create, {Key, Value}}, State) ->
      error_logger:info_msg("create{~w, ~w)~n", [Key, Value]),
      {ok, State};
    handle_event({lookup, Key}, State) ->
      error_logger:info_msg("lookup{~w)~n", [Key]),
      {ok, State};
    handle_event({delete, Key}, State) ->
      error_logger:info_msg("delete{~w)~n", [Key]),
      {ok, State};
    handle_event({replace, {Key, Value}}, State) ->
      error_logger:info_msg("replace{~w, ~w)~n", [Key, Value]),
      {ok, State}.
    
    init(_) ->
      ok.
    
    handle_call(_, _) ->
      ok.
    
    handle_info(_, _) ->
      ok.
    
    code_change(_, _, _) ->
      ok.
    
    terminate(_, _) ->
      ok.

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值