- SASL:System Architecture Support Libraries(系统架构支撑库)。
- 日志级别:
- critical 或 severe:表示系统遭遇了灾难性故障或者客户已无法访问系统,此时应立即采取人工措施。
- error:告知系统运维人员系统中出现了一些不良状况,但并不严重。
- warn:告知运维人员系统中出现了某些潜在的负面问题,但暂时无害。
- info:表示一条通告性消息,用于将某个事件的发生告知给运维人员。
- debug:提供各种巨细信息。
- 标准日志函数:
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).
- SASL:
application:start(sasl).
在 OTP 无关项目中,启动 SASL 往往没有效果,可以用 proc_lib:spawn/1 来启动进程。
因为 proc_lib 模块是 Erlang stdlib 应用的一部分,利用它可以按 OTP 的方式来启动进程,它会按照 OTP 的一些必要规范对进程进行设置。 -
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.
《Erlang/OTP并发编程实战》第七章 Erlang/OTP 中的日志与事件处理
最新推荐文章于 2021-08-11 16:28:39 发布