fern
fern copied to clipboard
Explore what key/value support should look like in fern
As of https://github.com/rust-lang/log/pull/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
- see https://github.com/daboross/fern/issues/62
- 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
- can be created by specifying a function from
- add the combinators from
Dispatch
toKeyValueDispatch
, of course each giving/accepting aKeyValueDispatch
instead - replace
format
withmap
- 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.