erlang-lager / lager

A logging framework for Erlang/OTP
Apache License 2.0
1.13k stars 455 forks source link

module and function formatter not working in placeholder in formatter config #319

Open linearregression opened 8 years ago

linearregression commented 8 years ago

Documentation states, that it's possible to use module and function placeholder in log formatter config: https://github.com/basho/lager/blob/3.1.0/README.md#custom-formatting The placeholders pid, file, line, module, function, and node will always exist if the parse transform is used.

But looks like it's just not implemented. It always produces Undefined and I can't find it anywhere in lager_transform. e.g.

    {handlers, [{lager_file_backend, [
        {file, "service.log"}, {level, info}, {formatter, lager_default_formatter}, {size, 0}, {date, "$D0"}, {count, 7},
            {formatter_config, ["[", date, " ", time, "] severity=", severity, " module=", module," function=", function, " "," pid=", pid, " ", message, "\n"]}
        ]}
    ]}

Results both module and function as undefined.

Console backend is even worse (more undefined e.g. node).

    {handlers, [
      {lager_console_backend, [info, {lager_default_formatter, [date,"#",time,"#",severity,"#",node,"#",pid,"#",module,"#",function,"#",file,"#",line,"#",message,"\r\n"]}]},
      {lager_file_backend, [
        {file, "service.log"}, {level, info}, {formatter, lager_default_formatter}, {size, 0}, {date, "$D0"}, {count, 7},
            {formatter_config, ["[", date, " ", time, "] severityfbkend=", severity, " module=", module," function=", function, " "," pid=", pid, " ", message, "\n"]}
        ]}
    ]}

Shows output as: /opt/opensource/lager_test# ./exec.sh Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [kernel-poll:false]

Eshell V7.2.1 (abort with ^G) (lager_test@127.0.0.1)1> lager:start(). ok (lager_test@127.0.0.1)2> 2016-02-20#18:25:33.396#info#Undefined#<0.7.0>#Undefined#Undefined#Undefined#Undefined#Application lager started on node 'lager_test@127.0.0.1'

jadeallenx commented 8 years ago

Thanks for the report. We'll look into it. We haven't used lager with OTP 18 much - I wonder if its broken on older OTPs too.

Vagabond commented 8 years ago

Messges from error_logger don't have all the callsite information that native lager messages do.

linearregression commented 8 years ago

But when I use 'lager_elogfmt_formatter, (same environment as above - erlang 18, same versionof lager etc.)

Lager_elogfmt_formatter is able to output module/function and even line meta data, switching back to lager_default_formatter cannot. Doubt lager_elogfmt_formatter fiddles with callsite in their source. It just relies on lager.

at https://github.com/heroku/lager_elogfmt_formatter/blob/master/README.md

the following line

lager:info("started/2"),

gives me a log liek the following:

app=lager_test severity=info msg="started/2" node=lager_test@127.0.0.1 line=24 function=start module=lager_test_app application=lager_test