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?

First 10 of 14 Posts Switch mode

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
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
rahultumpala
Hello, I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New

Other Trending Topics Top

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
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement