[erlang-questions] r21 logger difficulties

331 views
Skip to first unread message

Mark Geib

unread,
Jul 6, 2018, 2:44:13 PM7/6/18
to Erlang
I decided to take a look at the new logger in R21, but I am not able to produce any output.

In my sys.config I have the following:
{kernel,
    [{logger,
      [{handler, default, logger_std_h,
       #{level => debug,
         config => #{type => {file,"log/erlang.log"}},
         formatter => {logger_formatter, #{template => [time," ",pid," ",msg,"\n"]}}}
      }]
    }]
 }

And in my code I do something like logger:info(“test message”), but I never see any output to the file. I see the file log/erlang.log created, but always empty.

I must be missing something, but I have read through the docs, quickly.

Any pointers would be appreciated.

Mark.
signature.asc

Siri Hansen

unread,
Jul 9, 2018, 3:33:45 AM7/9/18
to mark.g...@gmail.com, Erlang
Hi Mark, you just missed that the primary log level by default is 'notice', which means that 'info' is rejected by the primary log level check. If you do logger:notice("test message") instead, it should be printed. To even print 'info', set the kernel configuration parameter logger_level to 'info', 'debug' or 'all' in your sys config, or set it in runtime with logger:set_primary_config(level,Level).

Regards
/siri

_______________________________________________
erlang-questions mailing list
erlang-q...@erlang.org
http://erlang.org/mailman/listinfo/erlang-questions

Mark Geib

unread,
Jul 9, 2018, 10:52:11 AM7/9/18
to Siri Hansen, Erlang
Thanks Siri,

But in my sys.config I included the log level, and I was trying to set it to “debug”.

I just now changed the level to “all” but still nothing in the log file.

BTW, if I force a crash due to runtime error I do see the crash reports in the log file, but that is all.

Also, lager is being pulled in by a dependency, could there be a conflict with lager.??

Thanks,

Mark.
signature.asc

Mark Geib

unread,
Jul 9, 2018, 1:22:30 PM7/9/18
to Siri Hansen, Erlang
So after some more debugging, it appears that if I use “debug” or “info” in either the sys.config logger config for the logging level, or as the level of log message I see nothing. If I use any of the other levels it appears to work as expected. All the combinations I tried worked as well, i.e. if I set the log level in the config to “notice” and then log with logger:emergency(), it works fine.

Mark.

On Jul 9, 2018, at 1:33 AM, Siri Hansen <erlan...@gmail.com> wrote:

signature.asc

Siri Hansen

unread,
Jul 11, 2018, 5:25:42 AM7/11/18
to mark.g...@gmail.com, Erlang
Hi again, Mark!

I see that you set the handler level to debug in the sys.config, but I can't see that the primary level is set? Please refer to the Kernel User's Guide, http://erlang.org/doc/apps/kernel/logger_chapter.html, for a description of how primary level check and -filters are applied prior to all handler level checks and -filters. (short version: if a log event does not pass the primary level check, it is discarded and will never hit any handler).

Primary level is 'notice' by default, and handler levels are 'all' by default.

What I mean is that your sys.config should look something like this:

{kernel,
    [{logger,
      [{handler, default, logger_std_h,
       #{level => debug,
         config => #{type => {file,"log/erlang.log"}},
         formatter => {logger_formatter, #{template => [time," ",pid," ",msg,"\n"]}}}
      }]
     },
     {logger_level, all}
    ]
}

Siri Hansen

unread,
Jul 11, 2018, 10:15:07 AM7/11/18
to mark.g...@gmail.com, Erlang
Sorry, there's a bug in OTP-21.0 which does not allow the value 'all' for 'logger_level', so you need to specify 'debug' instead:

{kernel,
    [{logger,
      [{handler, default, logger_std_h,
       #{level => debug,
         config => #{type => {file,"log/erlang.log"}},
         formatter => {logger_formatter, #{template => [time," ",pid," ",msg,"\n"]}}}
      }]
     },
     {logger_level, debug}
    ]
}

Reply all
Reply to author
Forward
0 new messages