So to summarize, just having this in your application.ex:
:logger.update_formatter_config(:default, %{metadata: [:your_metadata_key]})
…is enough. You don’t have to touch any of the configs in the config/ directory at all.
And you can just do this after:
Logger.info("stuff", your_metadata_key: other_stuff)
And it will be shown.
And when your metadata is not a primitive value (let’s not argue if string is a primitive, please
) then you should either JSON encode it, or just inspect it (which turns it into a string that you can just paste in iex most of the time).
So yeah, that’s that. Huge thanks to @LostKobrakai and @ibarch.
I have to say that I am disappointed. This is an implicit behavior that I expected to at least have Logger complain about. It instead silently rejects stuff.
I believe there’s a niche to be served in the Elixir ecosystem by custom Logger formatters, and probably an even bigger niche to just be able to configure Logger on maximum two places (compile + boot time config, and runtime config) and have zero surprises – which must include complaints if you pass it objects it would otherwise ignore.
Writing this down as one of my Elixir grievances. Might be able to tackle it OneDay™.






















