diff --git a/lib/elixir_ai/application.ex b/lib/elixir_ai/application.ex index dae08e4..c183815 100644 --- a/lib/elixir_ai/application.ex +++ b/lib/elixir_ai/application.ex @@ -4,6 +4,14 @@ defmodule ElixirAi.Application do @impl true def start(_type, _args) do + # Attach telemetry handler to filter health check logs + :telemetry.attach( + "filter-health-logs", + [:phoenix, :endpoint, :stop], + &filter_health_logs/4, + nil + ) + children = [ ElixirAiWeb.Telemetry, ElixirAi.Repo, @@ -39,4 +47,14 @@ defmodule ElixirAi.Application do ElixirAiWeb.Endpoint.config_change(changed, removed) :ok end + + # Filter health check requests from telemetry logs + defp filter_health_logs(_event, _measurements, %{conn: %{request_path: "/health"}}, _config) do + :ok + end + + defp filter_health_logs(event, measurements, metadata, config) do + # Forward to default Phoenix logger + :telemetry.execute(event, measurements, metadata) + end end diff --git a/lib/elixir_ai_web/endpoint.ex b/lib/elixir_ai_web/endpoint.ex index 0c685c6..f5bd0c5 100644 --- a/lib/elixir_ai_web/endpoint.ex +++ b/lib/elixir_ai_web/endpoint.ex @@ -38,9 +38,6 @@ defmodule ElixirAiWeb.Endpoint do cookie_key: "request_logger" plug Plug.RequestId - - plug Plug.Logger, log: :info, filter: &ElixirAiWeb.Endpoint.filter_health_check/1 - plug Plug.Telemetry, event_prefix: [:phoenix, :endpoint] plug Plug.Parsers, @@ -52,8 +49,4 @@ defmodule ElixirAiWeb.Endpoint do plug Plug.Head plug Plug.Session, @session_options plug ElixirAiWeb.Router - - # Filter health check requests from logs - def filter_health_check(%{request_path: "/health"}), do: false - def filter_health_check(_), do: :info end diff --git a/lib/elixir_ai_web/health_check_filter.ex b/lib/elixir_ai_web/health_check_filter.ex new file mode 100644 index 0000000..31122a4 --- /dev/null +++ b/lib/elixir_ai_web/health_check_filter.ex @@ -0,0 +1,15 @@ +defmodule ElixirAiWeb.HealthCheckFilter do + @moduledoc """ + Logger filter to suppress health check endpoint logs. + """ + + def filter(%{meta: meta}, _config) when is_map(meta) do + if Map.get(meta, :health_check) == true do + :stop + else + :ignore + end + end + + def filter(_log_event, _config), do: :ignore +end diff --git a/lib/elixir_ai_web/plugs/health_check_logger.ex b/lib/elixir_ai_web/plugs/health_check_logger.ex new file mode 100644 index 0000000..bfc5bbf --- /dev/null +++ b/lib/elixir_ai_web/plugs/health_check_logger.ex @@ -0,0 +1,19 @@ +defmodule ElixirAiWeb.Plugs.HealthCheckLogger do + @moduledoc """ + Plug that marks health check requests for filtering. + """ + @behaviour Plug + require Logger + + @impl true + def init(opts), do: opts + + @impl true + def call(%Plug.Conn{path_info: ["health"]} = conn, _opts) do + # Mark this as a health check for logger filtering + Logger.metadata(health_check: true) + conn + end + + def call(conn, _opts), do: conn +end diff --git a/mix.exs b/mix.exs index 0d590ba..a7be998 100644 --- a/mix.exs +++ b/mix.exs @@ -58,7 +58,8 @@ defmodule ElixirAi.MixProject do {:bandit, "~> 1.5"}, {:ecto_sql, "~> 3.11"}, {:postgrex, ">= 0.0.0"}, - {:horde, "~> 0.9"} + {:horde, "~> 0.9"}, + {:credo, "~> 1.7", only: [:dev, :test], runtime: false} ] end