# 2 Error Logging

###
2.1 Error Information From the Runtime System

Error information from the runtime system, that is, information about a process terminating because of an uncaught error exception, is by default written to terminal (tty):

    =ERROR REPORT==== 9-Dec-2003::13:25:02 ===
    Error in process <0.27.0> with exit value: {{badmatch,[1,2,3]},[{m,f,1},{shell,eval_loop,2}]}

The error information is handled by Logger, which is part of the Kernel application.

The exit reasons (such as badarg) used by the runtime system are described in Errors and Error Handling.

For information about Logger and its user interface, see the logger(3) manual page and the Logging section in the Kernel User's Guide. The system can be configured so that log events are written to file or to tty, or both. In addition, user-defined applications can send and format log events using Logger.

###
2.2 Log events from OTP behaviours

The standard behaviours (supervisor, gen_server, and so on) send progress and error information to Logger. Progress reports are by default not logged, but can be enabled by setting the primary log level to info, for example by using the Kernel configuration parameter logger_level. Supervisor reports, crash reports and other error and information reports are by default logged through the log handler which is set up when the Kernel application is started.

Prior to Erlang/OTP 21.0, supervisor, crash, and progress reports were only logged when the SASL application was running. This behaviour can, for backwards compatibility, be enabled by setting the Kernel configuration parameter logger_sasl_compatible to true. For more information, see SASL Error Logging in the SASL User's Guide.

    % erl -kernel logger_level info
    Erlang/OTP 21 [erts-10.0] [source-13c50db] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

    =PROGRESS REPORT==== 8-Jun-2018::16:54:19.916404 ===
        application: kernel
        started_at: nonode@nohost
    =PROGRESS REPORT==== 8-Jun-2018::16:54:19.922908 ===
        application: stdlib
        started_at: nonode@nohost
    =PROGRESS REPORT==== 8-Jun-2018::16:54:19.925755 ===
        supervisor: {local,kernel_safe_sup}
        started: [{pid,<0.74.0>},
                  {id,disk_log_sup},
                  {mfargs,{disk_log_sup,start_link,[]}},
                  {restart_type,permanent},
                  {shutdown,1000},
                  {child_type,supervisor}]
    =PROGRESS REPORT==== 8-Jun-2018::16:54:19.926056 ===
        supervisor: {local,kernel_safe_sup}
        started: [{pid,<0.75.0>},
                  {id,disk_log_server},
                  {mfargs,{disk_log_server,start_link,[]}},
                  {restart_type,permanent},
                  {shutdown,2000},
                  {child_type,worker}]
    Eshell V10.0  (abort with ^G)
    1>