I have a logger metadata plug (MyAppWeb.Plug.LoggerMetadata) that requires the following 2 plugs to run first in order to add the user_id
to the metadata:
- plug(:fetch_session)
- plug(MyAppWeb.Auth.Pipeline) (which uses Guardian to fetch the
user_id
)
So I initially set up the endpoint.ex file to look like this:
....
plug(:fetch_session)
plug MyAppWeb.Auth.Pipeline
plug MyAppWeb.Plug.LoggerMetadata
plug(Plug.Logger)
plug(MyAppWeb.Router)
...
It feels weird to have fetch_session
and Auth.Pipeline
in endpoint.ex as opposed to the router, though.
So I ended up moving those plugs back to the router.ex file like so:
...
pipeline :logger do
plug MyAppWeb.Plug.LoggerMetadata
plug(Plug.Logger)
end
pipeline :support_authentication do
plug(MyAppWeb.Auth.Pipeline)
end
pipeline :browser do
plug(:accepts, ["html"])
plug(:fetch_session)
plug(:support_authentication)
plug(:logger)
...
end
...
This also feels weird because now we have to explicitly call the logger with each new pipeline such as api
, ajax
, etc.
I’m wondering if there are any drawbacks/gotchas with my first method or maybe if I’m missing some third option.