defmodule Plug.Metadata do @moduledoc """ A plug for setting request meta data for logging """
require Logger alias Plug.Conn @behaviour Plug
def init(opts) do Keyword.get(opts, :metadata, [:request_path]) end
def call(conn, metadata) do conn |> collect(metadata) |> Logger.metadata
Conn.register_before_send(conn, fn conn -> conn |> collect([:status]) |> Logger.metadata conn end)
conn end
defp collect(conn, metadata) do for key <- metadata do {key, conn |> Map.get(key)} end endend plug Plug.RequestId plug Plug.Metadata plug Plug.Logger plug Plug.RequestId plug Plug.RequestMetadata plug Plug.Logger
plug Plug.ResponseMetadata