[erlang-questions] The best way to write user-friendly log from an OTP application

Martin Bjorklund <>
Tue Nov 11 08:49:03 CET 2008


"Sergey A." <> wrote:
> I'm looking for the best way to write a plain text log containing the
> reasons of some well-known errors happening in my OTP applications.
> The log should be like this:
> --------------------------------8<--------------------------------
> [2008-11-6 23:0:53] Such an ip and port already in use.
> [2008-11-6 23:1:45] Login or password is wrong
> --------------------------------8<--------------------------------
> Here is what I'm doing just now to achieve this behaviour:
> I use a gen_event module connected to the error_logger as a handler to
> catch all the errors (and it is where I write my log).

You might want to look at logger.erl and disk_log_h.erl in jungerl.

> But there are two mutually exclusive ways to denote that error has happened:
> 1) Do nothing. Just let the crash happen. A process will crash and
> you'll get a huuuuge message in your gen_event handler:


> 2) Decide the point where an error happen, and then call:
> error_logger:error_msg({my_error, Reason})


> What of the ways listed above is the best in your opinon and why?

As always, it depends on the application.  In our system, we separate
the normal error_logger log from logs aimed for the end user.

We use the error_logger to print crashes and other internal errors.
This log *should* always be empty, otherwise we have a bug in our
system.  We use the logger.erl and disk_log_h.erl modules for this

Then we have a set of logs for the user (audit logs etc.) and for
these we use explicit calls in the code.


More information about the erlang-questions mailing list