process metadata according the given keyword list. И условно если в одном процессе у тебя юзается 3-4 модуля метаданные туда везде залетят. Как-то неправославно? 🙂
defmodule A do require Logger def call() do Logger.metadata([a: 1]) Logger.info("hello from a") end end defmodule B do require Logger def call() do Logger.metadata([b: 2]) Logger.info("hello from b") end end Logger.configure_backend(:console, metadata: [:a, :b]) spawn(fn -> A.call() B.call() end)
Если у тебя много логики требующей логирования в одном процессе, которая при этом работает с настолько разными сущностями — то да, общий Logger.metadata/1 не подойдёт (хотя я нечасто встречался с таким "уберпроцессом"). Тогда во-первых метадату можно вторым аргументом в Logger.info/2, чтобы она была отдельная на каждый вызов но с плюшками автоформатирования на выходе, а во-вторых обернуть этот вызыв в defmacrop
не знаю даж, мне нравится думать что метаданные логгера это контекст процесса если в одном процессе у тебя на ключе в мете разные данные — это не метаданные, это нужно в message складывать, а не в мету
Самый простой пример такого процесса - это API call которые дергает 3-4 других модуля
Обсуждают сегодня