ログおよびイベント処理中のErlang / OTPの「アーラン/ OTP並行プログラミングの戦闘」の章VII

  1. SASL:システムアーキテクチャサポートライブラリ(システムアーキテクチャのサポートライブラリ)。
  2. ログレベル:
    1. 重要または重大な:システムが致命的な障害を被ったり、クライアントがシステムにアクセスすることができなかったこと、それはすぐに人工的な措置をとるべきです。
    2. エラー:システムの運用・保守要員のシステムを教えて、いくつかの悪い状況が、深刻な何もあります。
    3. 警告:システムの運用・保守担当者に通知するために、潜在的な負の問題のいくつか登場しますが、一時的に無害。
    4. 情報:発表は運用・保守担当者に通知するために発生するイベントについてのメッセージを表します。
    5. デバッグ:大小の様々な情報を提供しています。
  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).

    プロセスを開始するには産卵/ 1:OTP無関係なプロジェクトでは、多くの場合、効果的ではないSASLを始め、あなたはproc_libを使用することができます。
    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 ビュー10000 +

おすすめ

転載: blog.csdn.net/sanmao123456_/article/details/103447994