lager
lager copied to clipboard
module and function formatter not working in placeholder in formatter config
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) ([email protected])1> lager:start(). ok ([email protected])2> 2016-02-20#18:25:33.396#info#Undefined#<0.7.0>#Undefined#Undefined#Undefined#Undefined#Application lager started on node '[email protected]'
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.
Messges from error_logger don't have all the callsite information that native lager messages do.
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" [email protected] line=24 function=start module=lager_test_app application=lager_test