[erlang-questions] Extending error_logger
Martin Bjorklund
mbj@REDACTED
Wed Aug 15 09:46:29 CEST 2007
"denis" <dloutrein.lists@REDACTED> wrote:
> Hi all,
>
> In my server, which is an OTP application using supervisor, gen_servers, .,
> I use error_logger to log my information.
> I would like to modify error_logger to add one kind of message: debug, link
> error, debug, info.
> Is there a clean way to add it to error_logger ? I dug the source, but not
> find an easy way.
> For now, the only solution I found is to implement my own logger
> implementing all I need, and trap the events sent to error_logger by OTP
> framework.
> If I'm not mistaken, I can do it by writing my logger as event handler and
> register it with error_logger: add_report_handler.
> Am I one the good track ? Maybe there is a simpler method to do it ?
You can use error_logger:error_report/1,2 for this, and make sure your
handler formats these reports.
> Note that I also want to store logs as text file. I think that write a new
> error handler should do the job, like log_mf_h.
IMO, the log_mf_h/rb approach in OTP was a mistake. The last 10 years
or so we have always used text based error logs in all our projects.
I think the standard log_mf_h should be replaced with disk_log_h which
is in Jungerl.
Anyway, since OTP R10B-9, you can use the disk_log_h and logger
modules in jungerl w/o having to patch OTP. So, go to jungerl and
grab the files lib/msc/src/disk_log_h.erl and logger.erl. (I just
checked in my updated versions of these modules) Then, create the
following module:
-module(aa).
-export([start_errlog/0, test/0]).
start_errlog() ->
Opts = [{name, logger},
{file, "./elog"},
{type, wrap},
{format, external},
{force_size, true},
{size, {1024*1024, 5}}], % 5 files
gen_event:add_sup_handler(
error_logger,
{disk_log_h, logger},
disk_log_h:init(fun logger:form_no_progress/1, Opts)).
test() ->
error_logger:error_msg("testing ~p\n", [self()]).
Start erlang:
erl -pa jungerl/lib/msc/ebin/ -boot start_sasl
1> aa:start_errlog().
ok
2> exit(whereis(overload), foo).
true
3> aa:test().
ok
You should have some nicely formatted errors in elog.1. You can of
course you halt logs and everything else supported by disk_log.
Disclaimer: I haven't tested with R11.
/martin
More information about the erlang-questions
mailing list