Is it possible to add a node name/id to logger output?
I’m not thinking of a great way to set it for every process in your app, which I’m assuming is your question? For a single process you can do something like Logger.metadata(node: Node.self())
. For a single log you could do Logger.info("my log message", node: Node.self())
. You would need to configure logger to include :node
in the metadata it prints.
One option if you’re looking to add it for every log message would be to create your own formatter that passes everything along to the default formatter with one exception: it adds the node to the metadata.
defmodule MyApp.LogFormatter do
@pattern Logger.Formatter.compile("\n$time $metadata[$level] $levelpad$message\n")
def format(level, message, timestamp, metadata) do
Logger.Formatter.format(@pattern, level, message, timestamp, [{:node, Node.self()} | metadata])
end
end
You’ll need to swap out the formatter in your config:
config :logger, :console,
format: {MyApp.LogFormatter, :format},
metadata: [:node, ...]
3 Likes