error_logger
error_logger
模块
error_logger
模块摘要
Erlang错误记录器
描述
Erlang 错误记录器
是一个事件管理器(参见OTP Design Principles
和gen_event(3)
),注册为error_logger
。错误,警告和信息事件从Erlang运行时系统和不同的Erlang / OTP
应用程序发送到错误记录器
。这些事件默认记录到终端。请注意,来自进程的事件P
记录在组长的节点上P
。这意味着日志输出被定向到从中创建进程的节点,这不一定是与其执行的节点相同的节点。
一开始,error_logger
只有一个原始事件处理程序,用于缓冲和打印原始事件消息。在系统启动期间,内核应用程序将此替换为标准事件处理程序
默认情况下,将格式良好的输出写入终端。还可以配置内核,以便将事件记录到文件中,或者根本不记录事件,请参阅kernel(6)
...
此外,如果SASL应用程序启动,它将添加自己的事件处理程序,默认情况下,事件处理程序会向终端写入监控器、崩溃和进度报告。见sasl(6)
...
建议用户定义的应用程序通过错误记录器报告错误,以获得统一的报告。可以添加用户定义的事件处理程序来处理特定于应用程序的事件,请参阅add_report_handler/1,2
此外,STDLIB中还提供了一个有用的事件处理程序,用于多文件记录事件,请参见log_mf_h(3)
...
Erlang/OTPR9C中引入了警告事件,默认情况下从Erlang/otp 18.0开始启用。为了保持与现有用户定义事件处理程序的向后兼容性,可以将警告事件标记为errors或info使用命令行标志+W <e | i | w>,从而显示为ERROR REPORT或INFO REPORT在原木上。
数据类型
report() =
[{Tag :: term(), Data :: term()} | term()] | string() | term()
出口
add_report_handler(Handler) - > any()
add_report_handler(Handler, Args) -> Result
类型
将新的事件处理程序添加到错误记录器。事件处理程序必须实现为gen_event
回调模块,请参见gen_event(3)
...
Handler
通常是回调模块的名称,并且Args
是传递给初始化回调函数的可选项(默认为[])Handler:init/1
。ok
如果成功,函数将返回。
事件处理程序必须能够处理本模块中的事件,请参阅Events
...
delete_report_handler(Handler) -> Result
类型
通过调用gen_event:delete_handler(error_logger, Handler, [])
,见gen_event(3)
...
error_msg(Format) -> ok
error_msg(Format, Data) -> ok
format(Format, Data) -> ok
类型
向错误记录器发送标准错误事件。大Format
和Data
参数与io:format/2
在STDLIB。事件由标准事件处理程序处理。
例子:
1> error_logger:error_msg("An error occurred in ~p~n", [a_module]).
=ERROR REPORT==== 11-Aug-2005::14:03:19 ===
An error occurred in a_module
ok
警告
如果使用错误的参数调用该函数,则该函数会使标准事件处理程序崩溃,这意味着不会记录更多的事件。有疑问时,使用error_report/1
相反。
警告
如果Unicode转换修饰符(t
)在格式字符串中使用,则所有错误处理程序必须确保格式化的输出已正确编码为I / O设备。
error_report(Report) -> ok
类型
向错误记录器发送标准错误报告事件。事件由标准事件处理程序处理。
例子:
2> error_logger:error_report([{tag1,data1},a_term,{tag2,data}]).
=ERROR REPORT==== 11-Aug-2005::13:45:41 ===
tag1: data1
a_term
tag2: data
ok
3> error_logger:error_report("Serious error in my module").
=ERROR REPORT==== 11-Aug-2005::13:45:49 ===
Serious error in my module
ok
error_report(Type, Report) -> ok
类型
向错误记录器发送用户定义的错误报告事件。应该添加了处理事件的事件处理程序。标准事件处理程序将忽略该事件。
建议Report
与error_report/1
...
get_format_depth() -> unlimited | integer() >= 1
返回max(10, Depth)
,在哪里Depth
的价值error_logger_format_depth
在内核应用程序中,如果深度是整数的话。否则,unlimited
会被归还。
info_msg(Format) -> ok
info_msg(Format, Data) -> ok
类型
向错误记录器发送标准信息事件。大Format
和Data
参数与io:format/2
在STDLIB。事件由标准事件处理程序处理。
例子:
1> error_logger:info_msg("Something happened in ~p~n", [a_module]).
=INFO REPORT==== 11-Aug-2005::14:06:15 ===
Something happened in a_module
ok
警告
如果使用错误的参数调用该函数,则该函数会使标准事件处理程序崩溃,这意味着不会记录更多的事件。有疑问时,使用info_report/1
相反。
警告
如果Unicode转换修饰符(t
)在格式字符串中使用,则所有错误处理程序必须确保格式化的输出已正确编码为I / O设备。
info_report(Report) -> ok
类型
向错误记录器发送标准信息报告事件。事件由标准事件处理程序处理。
例子:
2> error_logger:info_report([{tag1,data1},a_term,{tag2,data}]).
=INFO REPORT==== 11-Aug-2005::13:55:09 ===
tag1: data1
a_term
tag2: data
ok
3> error_logger:info_report("Something strange happened").
=INFO REPORT==== 11-Aug-2005::13:55:36 ===
Something strange happened
ok
info_report(Type, Report) -> ok
类型
向错误记录器发送用户定义的信息报告事件。应该添加了处理事件的事件处理程序。标准事件处理程序将忽略该事件。
建议Report
与info_report/1
...
logfile(Request :: {open, Filename}) -> ok | {error, OpenReason}
logfile(Request :: close) -> ok | {error, CloseReason}
logfile(Request :: filename) -> Filename | {error, FilenameReason}
类型
启用或禁用标准事件的打印到文件。
这是通过添加或删除输出到文件的标准事件处理程序来完成的。因此,调用此函数将重写内核的值。error_logger
配置参数
启用文件日志可以与调用一起使用。tty(false)
,以使所有标准事件仅记录到文件中。一次只能激活一个日志文件。
Request
为下列之一:
{open, Filename}
打开日志文件Filename
.返回ok
如果成功,或{error, allready_have_logfile}
如果已启用到文件的日志记录,或者如果发生了其他错误,则为错误元组(例如,Filename
无法打开%29。该文件是用编码UTF-8打开的。
close
关闭当前日志文件。回报ok
,或{error, module_not_found}
...
filename
返回日志文件的名称。Filename
,或{error, no_log_file}
如果未启用日志到文件。
tty(Flag) -> ok
类型
启用(Flag == true
)或禁用(Flag == false
)将标准事件打印输出到终端。
这是通过添加或删除输出到终端的标准事件处理程序来完成的。因此,调用此函数将重写内核的值。error_logger
配置参数
warning_map() -> Tag
类型
返回警告事件的当前映射。使用warning_msg/1,2
或发送的事件warning_report/1,2
标记为错误,警告(默认)或信息,具体取决于命令行标志的值+W
。
例子:
os$ erl
Erlang (BEAM) emulator version 5.4.8 [hipe] [threads:0] [kernel-poll]
Eshell V5.4.8 (abort with ^G)
1> error_logger:warning_map().
warning
2> error_logger:warning_msg("Warnings tagged as: ~p~n", [warning]).
=WARNING REPORT==== 11-Aug-2005::15:31:55 ===
Warnings tagged as: warning
ok
3>
User switch command
--> q
os$ erl +W e
Erlang (BEAM) emulator version 5.4.8 [hipe] [threads:0] [kernel-poll]
Eshell V5.4.8 (abort with ^G)
1> error_logger:warning_map().
error
2> error_logger:warning_msg("Warnings tagged as: ~p~n", [error]).
=ERROR REPORT==== 11-Aug-2005::15:31:23 ===
Warnings tagged as: error
ok
warning_msg(Format) -> ok
warning_msg(Format, Data) -> ok
类型
向错误记录器发送标准警告事件。大Format
和Data
参数与io:format/2
在STDLIB。事件由标准事件处理程序处理。它被标记为错误、警告或信息,请参见warning_map/0
...
警告
如果使用错误的参数调用该函数,则该函数会使标准事件处理程序崩溃,这意味着不会记录更多的事件。有疑问时,使用warning_report/1
相反。
警告
如果Unicode转换修饰符(t
)在格式字符串中使用,则所有错误处理程序必须确保格式化的输出已正确编码为I / O设备。
warning_report(报告) - >确定
类型
向错误记录器发送标准警告报告事件。事件由标准事件处理程序处理。它被标记为错误、警告或信息,请参见warning_map/0
...
warning_report(Type,Report) - > ok
类型
向错误记录器发送用户定义的警告报告事件。应该添加了处理事件的事件处理程序。标准事件处理程序将忽略该事件。它被标记为错误、警告或信息,具体取决于warning_map/0
...
事件
添加到错误记录器中的所有事件处理程序必须处理下列事件。Gleader
是发送事件的进程的组领导PID,并且Pid
发送事件的进程。
{error, Gleader, {Pid, Format, Data}}
生成时error_msg/1,2
或format
叫做。
{error_report, Gleader, {Pid, std_error, Report}}
生成时error_report/1
叫做。
{error_report, Gleader, {Pid, Type, Report}}
生成时error_report/2
叫做。
{warning_msg, Gleader, {Pid, Format, Data}}
生成时warning_msg/1,2
如果将警告设置为警告,则调用。
{warning_report, Gleader, {Pid, std_warning, Report}}
生成时warning_report/1
如果将警告设置为警告,则调用。
{warning_report, Gleader, {Pid, Type, Report}}
生成时warning_report/2
如果将警告设置为警告,则调用。
{info_msg, Gleader, {Pid, Format, Data}}
生成时info_msg/1,2
叫做。
{info_report, Gleader, {Pid, std_info, Report}}
生成时info_report/1
叫做。
{info_report, Gleader, {Pid, Type, Report}}
生成时info_report/2
叫做。
请注意,也可以接收到一些系统内部事件。因此,在事件处理程序回调函数的定义中最后一个CATCall子句。Module:handle_event/2
是必要的。这也适用于Module:handle_info/2
,因为事件处理程序还必须处理一些系统内部消息。