《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.
发布了42 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sanmao123456_/article/details/103447994