Logging Guidelines

All log entries should be tagged.

All log entries outputting messages which include some data should be tagged with :data. For example, input data of a function (arguments) should have the :data tag applied, as well as the output data of a function (return value).

Choosing the Log Level

When trying to choose which log level should be used for a message, refer to this guide:

Trace Level

The trace level is used to log the entry of a function that concludes with either an info or debug log message.

Log messages at the trace level are typically worded to indicate that something is being done or about to be done. The ing present or gerund form of verbs is used in trace messages, for example "Writing message".

Debug Level

The debug level is used to log the completion of a secondary operation of a function, or for recording other details.

Log messages at the debug level are typically worded to indicate that something has been done or completed. The ed past tense form of verbs is used in debug messages, for example "Wrote initial message".

Info Level

The info level is used to log the completion of the principle operation of a function.

Log messages at the info level are typically worded to indicate that something has been done or completed. The ed past tense form of verbs is used in info messages, for example "Wrote message".

Warn Level

The warn level is used to log an unexpected condition that isn't an error and that does not need to terminate the process. A warn log message indicates something that may not have been intentional and that a developer or operator should examine.

Error Level

The error level is used to log an error message immediately before an error is raised or when handling an error tuple.

Fatal Level

The fatal level is used only when a service (for example: a GenServer) is terminating due to an error.