Erlang error logger.
Note!
In Erlang/OTP 21.0, a new API for logging was added. The
old error_logger
module can still be used by legacy
code, but log events are redirected to the new Logger API. New
code should use the Logger API directly.
error_logger
is no longer started by default, but is
automatically started when an event handler is added
with error_logger:add_report_handler/1,2
. The error_logger
module is then also added as a handler to the new logger.
See logger(3)
and
the Logging chapter
in the User's Guide for more information.
The Erlang error logger is an event manager (see
OTP Design Principles and
gen_event(3)
),
registered as error_logger
.
Error logger is no longer started by default, but is
automatically started when an event handler is added
with
add_report_handler/1,2
. The error_logger
module is then also added as a handler to the new logger,
causing log events to be forwarded from logger to error logger,
and consequently to all installed error logger event
handlers.
User-defined event handlers can be added to handle application-specific events.
Existing event handlers provided by STDLIB and SASL are still available, but are no longer used by OTP.
Warning events were introduced in Erlang/OTP R9C and are enabled
by default as from Erlang/OTP 18.0. To retain backwards compatibility
with existing user-defined event handlers, the warning events can be
tagged as errors
or info
using command-line flag
+W <e | i | w>
, thus showing up as
ERROR REPORT
or INFO REPORT
in the logs.
Functions
add_report_handler(Handler) -> any()
Handler = module()
add_report_handler(Handler, Args) -> Result
Handler = module()
Args = gen_event:handler_args()
Result = gen_event:add_handler_ret()
Adds a new event handler to the error logger. The event
handler must be implemented as a gen_event
callback
module, see
gen_event(3)
.
is typically the name of the callback module
and
is an optional term (defaults to []) passed
to the initialization callback function
.
The function returns ok
if successful.
The event handler must be able to handle the events in this module, see section Events.
The first time this function is called,
error_logger
is added as a Logger handler, and
the error_logger
process is started.
delete_report_handler(Handler) -> Result
Handler = module()
Result = gen_event:del_handler_ret()
Deletes an event handler from the error logger by calling
gen_event:delete_handler(error_logger,
,
see gen_event(3)
.
If no more event handlers exist after the deletion,
error_logger
is removed as a Logger handler, and
the error_logger
process is stopped.
error_msg(Format) -> ok
Format = string()
error_msg(Format, Data) -> ok
Format = string()
Data = list()
format(Format, Data) -> ok
Format = string()
Data = list()
Log a standard error event. The
and
arguments are the same as the
arguments of
io:format/2
in STDLIB.
Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
The event is handled by the default Logger handler.
These functions are kept for backwards compatibility and
must not be used by new code. Use the
?LOG_ERROR
macro or
logger:error/1,2,3
instead.
Example:
1> error_logger:error_msg("An error occurred in ~p", [a_module]).
=ERROR REPORT==== 22-May-2018::11:18:43.376917 ===
An error occurred in a_module
ok
Warning!
If the Unicode translation modifier (t
) is used in
the format string, all event handlers must ensure that the
formatted output is correctly encoded for the I/O
device.
error_report(Report) -> ok
Report = report()
Log a standard error event. Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
The event is handled by the default Logger handler.
This functions is kept for backwards compatibility and
must not be used by new code. Use the
?LOG_ERROR
macro or
logger:error/1,2,3
instead.
Example:
2>error_logger:error_report([{tag1,data1},a_term,{tag2,data}]).
=ERROR REPORT==== 22-May-2018::11:24:23.699306 === tag1: data1 a_term tag2: data ok 3>error_logger:error_report("Serious error in my module").
=ERROR REPORT==== 22-May-2018::11:24:45.972445 === Serious error in my module ok
error_report(Type, Report) -> ok
Type = term()
Report = report()
Log a user-defined error event. Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
Error logger also adds a domain
field with
value [
to this event's metadata,
causing the filters of the default Logger handler to discard
the event. A different Logger handler, or an error logger
event handler, must be added to handle this event.
It is recommended that
follows the same
structure as for
error_report/1
.
This functions is kept for backwards compatibility and
must not be used by new code. Use the
?LOG_ERROR
macro or
logger:error/1,2,3
instead.
get_format_depth() -> unlimited | integer() >= 1
Returns max(10, Depth)
, where Depth
is the
value of error_logger_format_depth
in the Kernel application, if Depth is an integer. Otherwise,
unlimited
is returned.
Note!
The error_logger_format_depth
variable
is
deprecated since
the Logger API was
introduced in Erlang/OTP 21.0. The variable, and this
function, are kept for backwards compatibility since they
still might be used by legacy report handlers.
info_msg(Format) -> ok
Format = string()
info_msg(Format, Data) -> ok
Format = string()
Data = list()
Log a standard information event. The
and
arguments are the same as the
arguments of
io:format/2
in STDLIB.
Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
The event is handled by the default Logger handler.
These functions are kept for backwards compatibility and
must not be used by new code. Use the
?LOG_INFO
macro or
logger:info/1,2,3
instead.
Example:
1> error_logger:info_msg("Something happened in ~p", [a_module]).
=INFO REPORT==== 22-May-2018::12:03:32.612462 ===
Something happened in a_module
ok
Warning!
If the Unicode translation modifier (t
) is used in
the format string, all event handlers must ensure that the
formatted output is correctly encoded for the I/O
device.
info_report(Report) -> ok
Report = report()
Log a standard information event. Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
The event is handled by the default Logger handler.
This functions is kept for backwards compatibility and
must not be used by new code. Use the
?LOG_INFO
macro or
logger:info/1,2,3
instead.
Example:
2>error_logger:info_report([{tag1,data1},a_term,{tag2,data}]).
=INFO REPORT==== 22-May-2018::12:06:35.994440 === tag1: data1 a_term tag2: data ok 3>error_logger:info_report("Something strange happened").
=INFO REPORT==== 22-May-2018::12:06:49.066872 === Something strange happened ok
info_report(Type, Report) -> ok
Type = any()
Report = report()
Log a user-defined information event. Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
Error logger also adds a domain
field with
value [
to this event's metadata,
causing the filters of the default Logger handler to discard
the event. A different Logger handler, or an error logger
event handler, must be added to handle this event.
It is recommended that
follows the same
structure as for
info_report/1
.
This functions is kept for backwards compatibility and
must not be used by new code. Use the
?LOG_INFO
macro or
logger:info/1,2,3
instead.
open_error() = file:posix() | badarg | system_limit
Enables or disables printout of standard events to a file.
This is done by adding or deleting
the error_logger_file_h
event handler, and thus
indirectly adding error_logger
as a Logger
handler.
Notice that this function does not manipulate the Logger configuration directly, meaning that if the default Logger handler is already logging to a file, this function can potentially cause logging to a second file.
This function is useful as a shortcut during development
and testing, but must not be used in a production
system. See
section Logging
in the Kernel User's Guide, and
the logger(3)
manual page for information about how to configure Logger
for live systems.
Request
is one of the following:
{open, Filename }
Opens log file
. Returns ok
if
successful, or {error, allready_have_logfile}
if
logging to file is already enabled, or an error tuple if
another error occurred (for example, if
cannot be opened). The file is opened with encoding UTF-8.
close
Closes the current log file. Returns ok
, or
{error, module_not_found}
.
filename
Returns the name of the log file
, or
{error, no_log_file}
if logging to file is not
enabled.
tty(Flag) -> ok
Flag = boolean()
Enables (
) or disables
(
) printout of standard events
to the terminal.
This is done by manipulating the Logger configuration. The
function is useful as a shortcut during development and
testing, but must not be used in a production system. See
section Logging
in the Kernel User's Guide, and
the logger(3)
manual page for information about how to configure Logger
for live systems.
warning_map() -> Tag
Tag = error | warning | info
Returns the current mapping for warning events. Events sent
using warning_msg/1,2
or warning_report/1,2
are tagged as errors, warnings (default), or info, depending
on the value of command-line flag +W
.
Example:
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
Format = string()
warning_msg(Format, Data) -> ok
Format = string()
Data = list()
Log a standard warning event. The
and
arguments are the same as the
arguments of
io:format/2
in STDLIB.
Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
The event is handled by the default Logger handler. The log
level can be changed to error or info, see
warning_map/0
.
These functions are kept for backwards compatibility and
must not be used by new code. Use the
?LOG_WARNING
macro or
logger:warning/1,2,3
instead.
Warning!
If the Unicode translation modifier (t
) is used in
the format string, all event handlers must ensure that the
formatted output is correctly encoded for the I/O
device.
warning_report(Report) -> ok
Report = report()
Log a standard warning event. Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
The event is handled by the default Logger handler. The log
level can be changed to error or info, see
warning_map/0
.
This functions is kept for backwards compatibility and
must not be used by new code. Use the
?LOG_WARNING
macro or
logger:warning/1,2,3
instead.
warning_report(Type, Report) -> ok
Type = any()
Report = report()
Log a user-defined warning event. Error logger forwards the event to Logger, including metadata that allows backwards compatibility with legacy error logger event handlers.
Error logger also adds a domain
field with
value [
to this event's metadata,
causing the filters of the default Logger handler to discard
the event. A different Logger handler, or an error logger
event handler, must be added to handle this event.
The log level can be changed to error or info, see
warning_map/0
.
It is recommended that
follows the same
structure as for
warning_report/1
.
This functions is kept for backwards compatibility and
must not be used by new code. Use the
?LOG_WARNING
macro or
logger:warning/1,2,3
instead.
Events
All event handlers added to the error logger must handle
the following events. Gleader
is the group leader pid of
the process that sent the event, and Pid
is the process
that sent the event.
{error, Gleader, {Pid, Format, Data}}
Generated when error_msg/1,2
or format
is
called.
{error_report, Gleader, {Pid, std_error, Report}}
Generated when error_report/1
is called.
{error_report, Gleader, {Pid, Type, Report}}
Generated when error_report/2
is called.
{warning_msg, Gleader, {Pid, Format, Data}}
Generated when warning_msg/1,2
is called
if warnings are set to be tagged as warnings.
{warning_report, Gleader, {Pid, std_warning, Report}}
Generated when warning_report/1
is called
if warnings are set to be tagged as warnings.
{warning_report, Gleader, {Pid, Type, Report}}
Generated when warning_report/2
is called
if warnings are set to be tagged as warnings.
{info_msg, Gleader, {Pid, Format, Data}}
Generated when info_msg/1,2
is called.
{info_report, Gleader, {Pid, std_info, Report}}
Generated when info_report/1
is called.
{info_report, Gleader, {Pid, Type, Report}}
Generated when info_report/2
is called.
Notice that some system-internal events can also be
received. Therefore a catch-all clause last in the definition of
the event handler callback function Module:handle_event/2
is necessary. This also applies for
Module:handle_info/2
, as the event handler must also take care of
some system-internal messages.