非常教程

Erlang 20参考手册

核心 | kernel

error_logger

模块

error_logger

模块摘要

Erlang错误记录器

描述

Erlang 错误记录器是一个事件管理器(参见OTP Design Principlesgen_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开始启用。为了保持与现有用户定义事件处理程序的向后兼容性,可以将警告事件标记为errorsinfo使用命令行标志+W <e | i | w>,从而显示为ERROR REPORTINFO 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/1ok如果成功,函数将返回。

事件处理程序必须能够处理本模块中的事件,请参阅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

类型

向错误记录器发送标准错误事件。大FormatData参数与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

类型

向错误记录器发送用户定义的错误报告事件。应该添加了处理事件的事件处理程序。标准事件处理程序将忽略该事件。

建议Reporterror_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

类型

向错误记录器发送标准信息事件。大FormatData参数与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

类型

向错误记录器发送用户定义的信息报告事件。应该添加了处理事件的事件处理程序。标准事件处理程序将忽略该事件。

建议Reportinfo_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

类型

向错误记录器发送标准警告事件。大FormatData参数与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,2format叫做。

{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,因为事件处理程序还必须处理一些系统内部消息。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1