As of rust-lang/log#324, there's unstable support for key/value pairs in logging in log. For more information, see the tracking issue.
We probably want some amount of builtin support for key/value pairs in fern. It's unclear, though, exactly what form this support should take.
Some initial ideas:
- filtering based on key values or keys being present
- ability to add, remove and change keys while formatting
- ability to output log messages, with key/value pairs & message, as JSON or others
- some default way to incorporate kv pairs into formatting (might be a recipe?)
A more invasive setup could be:
- add a new
KeyValueDispatch dispatch type
- can be created by specifying a function from
(arguments, record) to key/value pairs
- pushes responsibility onto user to decide what key "message" and "log level" end up as
- we'd provide a sane default which maps all the record's fields to sane names, maybe namespaced
- add the combinators from
Dispatch to KeyValueDispatch, of course each giving/accepting a KeyValueDispatch instead
- replace
format with map - a general kv map with the same principles
- replace
output's single argument with multiple: one specifying a format (like newline-separated JSON), the other specifying where to write it
I'm not committed to any of these, this is just initial brainstorming.
We'll probably want to look at what one can do with key/value pairs in logging configuration in slog too, as they've explored this problem space a lot more than we have.
As of rust-lang/log#324, there's unstable support for key/value pairs in logging in
log. For more information, see the tracking issue.We probably want some amount of builtin support for key/value pairs in
fern. It's unclear, though, exactly what form this support should take.Some initial ideas:
A more invasive setup could be:
KeyValueDispatchdispatch type(arguments, record)to key/value pairsDispatchtoKeyValueDispatch, of course each giving/accepting aKeyValueDispatchinsteadformatwithmap- a general kv map with the same principlesoutput's single argument with multiple: one specifying a format (like newline-separated JSON), the other specifying where to write itI'm not committed to any of these, this is just initial brainstorming.
We'll probably want to look at what one can do with key/value pairs in logging configuration in
slogtoo, as they've explored this problem space a lot more than we have.