johnhamelink

johnhamelink

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?

Showing Posts 1 to 10

johnhamelink

johnhamelink OP

I figured it out :slight_smile: thanks to @benwilson512 and others!

The answer is to use pipelines:

  • Remove the Plug.Logger line from the endpoint.ex file.
  • Add a pipeline which doesn’t include the Logger
  • Add plug Plug.Logger to all other pipelines
  • Add pipe_through <pipeline which doesn't include logger> to the scope you don’t want to log.
17
Post #1
gzrain

gzrain

Hi

I know this post has been a while but I have the same situation like this now.

I have a health_check controller which receives ping every xx secs, and would be ideal the logger to be turned off for it.

But the current phoenix version does not have Plug.Logger in endpoint.ex any more so I don’t where to disable it and then apply it in router.ex via different pipeline.

Anyone has idea?

elixir: 1.9.1
phoenix: 1.4.9

Kind regards
Rain

jola

jola

scope log: false do
  get "/pages/:id", PageController, :show
end

or

get "/pages/:id", PageController, :show, log: false
17
Post #3
gzrain

gzrain

thank you for you reply, however I cannot get it work as the documentation

> mix phx.new --version
Phoenix v1.4.9

> mix phx.new phx_app
....

and then I open router.ex, tried both

  scope "/", PhxAppWeb, log: false do
    pipe_through :browser

    get "/", PageController, :index
  end

and

  scope "/", PhxAppWeb do
    pipe_through :browser

    get "/", PageController, :index, log: false
  end

still I can see the logs

[info] GET /
[info] Sent 200 in 286µs

Regards

Phillipp

Phillipp

Confirmed. The option on the scope does not work.

And I don’t like the pipeline workaround.

cnck1387

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.

10
Post #6
gzrain

gzrain

it works like charm!! Thanks mate ~

jonator

jonator

It may be best to mark yours as the best solution as not to confuse others.

SZJX

SZJX

This StackOverflow post also provides two alternatives approaches:

Pre-Telemetry (by Wile E. Coyote):

Define a custom plug to replace Plug.Logger in endpoint.ex:

defmodule MyApp.Logger do
  def init(_opts), do: {}

  def call(%{path_info: ["ping"]} = conn, _opts) do
    Plug.Logger.call(conn, :error)
  end
  def call(conn, _opts) do
    Plug.Logger.call(conn, :info)
  end
end

Post-Telemetry (by Ilja Everilä):

Define a custom Telemetry Plug and replace the plug in endpoint.ex:

defmodule MyWeb.Plugs.Telemetry do
  @behaviour Plug

  @impl true
  def init(opts), do: Plug.Telemetry.init(opts)

  @impl true
  def call(%{path_info: ["ping"]} = conn, {start_event, stop_event, opts}) do
    Plug.Telemetry.call(conn, {start_event, stop_event, Keyword.put(opts, :log, :debug)})
  end
  def call(conn, args), do: Plug.Telemetry.call(conn, args)
end
dvic

dvic

I just ran into this. I believe the scope option is not about those GET / and Sent 200 in 286µs logs, it’s about these debug logs you see:

[debug] Processing with PhxDisableLogWeb.PageController.index/2
  Parameters: %{}
  Pipelines: [:browser]

You will notice that the log: false option on scope does disable these log entries.

The other request logs are disabled by adding log: false to the Plug.Telemetry plug (in endpoint.ex), but this then applies to all routes. I am not aware of an approach to disable these on a per request basis (without resorting to your own logging).

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews