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

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews