johnhamelink
Disable logging on specific route?
Hey there,
I have an endpoint that’s used to check to see if an instance is up and available (for use with a node balancer). The node balancer will hit this endpoint once a second or so. Obviously that produces a lot of unnecessary log chatter, so I’m trying to figure out how to disable the request logging for this endpoint only.
I noticed that in Phoenix.Controller there’s an option under Plug Pipeline called “log” - but I’m not sure if it’s relevant and how to use it if it is.
Anyone else figured this out before?
Marked As Solved
johnhamelink
I figured it out
thanks to @benwilson512 and others!
The answer is to use pipelines:
- Remove the
Plug.Loggerline from theendpoint.exfile. - Add a pipeline which doesn’t include the Logger
- Add
plug Plug.Loggerto all other pipelines - Add
pipe_through <pipeline which doesn't include logger>to the scope you don’t want to log.
Also Liked
jola
scope log: false do
get "/pages/:id", PageController, :show
end
or
get "/pages/:id", PageController, :show, log: false
https://hexdocs.pm/phoenix/Phoenix.Router.html#scope/2
https://hexdocs.pm/phoenix/Phoenix.Router.html#get/4
cnck1387
I use this plug:
defmodule HelloWeb.Plug.HealthCheck do
import Plug.Conn
def init(opts), do: opts
def call(%Plug.Conn{request_path: "/healthy"} = conn, _opts) do
conn
|> send_resp(200, "")
|> halt()
end
def call(conn, _opts), do: conn
end
And then endpoint.ex uses it like this plug(HelloWeb.Plug.HealthCheck) as the first thing that gets defined. This way it does the least amount of work possible. No controller or route needed and your normal pipeline gets ignored.
Pretty sure I grabbed that snippet and slightly modified it from one of @jola’s blog posts.
akoutmos
For anyone that stumbles across this question in the future, I wrote a library to do this exact thing but with any plug GitHub - akoutmos/unplug: Unplug allows you to conditionally execute your Elixir plugs at run-time
Using Unplug, you can provide a predicate module that gets evaluated under the context of the current plug, and you can specify whether you want the attached plug to be executed or not.







