Add client IP to request log metadata

Set Logger metadata from conn.remote_ip in the RemoteIp plug so
request logs include the client address.
This commit is contained in:
Graham McIntire 2026-02-20 17:48:08 -06:00
parent 03e2cf3403
commit cf97bf236a
No known key found for this signature in database
3 changed files with 12 additions and 6 deletions

View file

@ -126,7 +126,7 @@ config :esbuild,
# Configures Elixir's Logger
config :logger, :console,
format: "$time $metadata[$level] $message\n",
metadata: [:request_id]
metadata: [:request_id, :remote_ip]
# Use Jason for JSON parsing in Phoenix
config :phoenix, :json_library, Jason

View file

@ -85,7 +85,7 @@ config :hammer,
# The `http:` config above can be replaced with:
#
# https: [
config :logger, :console, format: "[$level] $message\n"
config :logger, :console, format: "[$level] $metadata$message\n", metadata: [:remote_ip]
# Initialize plugs at runtime for faster development compilation
# port: 4001,

View file

@ -11,15 +11,21 @@ defmodule AprsmeWeb.Plugs.RemoteIp do
import Plug.Conn
require Logger
@impl true
def init(opts), do: opts
@impl true
def call(conn, _opts) do
case get_client_ip(conn) do
{:ok, ip} -> %{conn | remote_ip: ip}
:error -> conn
end
conn =
case get_client_ip(conn) do
{:ok, ip} -> %{conn | remote_ip: ip}
:error -> conn
end
Logger.metadata(remote_ip: conn.remote_ip |> :inet.ntoa() |> to_string())
conn
end
defp get_client_ip(conn) do