fern icon indicating copy to clipboard operation
fern copied to clipboard

Explore what key/value support should look like in fern

Open daboross opened this issue 4 years ago • 0 comments

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
  • 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.

daboross avatar Jun 05 '20 05:06 daboross