Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions lib/logster.ex
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ defmodule Logster do
extra_fields: Application.get_env(:logster, :extra_fields, []),
excludes: Application.get_env(:logster, :excludes, []),
renames: Application.get_env(:logster, :renames, []),
filter_headers: Application.get_env(:logster, :filter_headers, []),
filter_parameters:
Application.get_env(:logster, :filter_parameters, @default_filter_parameters)
}
Expand Down Expand Up @@ -165,6 +166,7 @@ defmodule Logster do
# add items in reverse order of how we want them to appear in the log message.
[]
|> maybe_put_duration(duration_us, log_config)
|> maybe_put_filter_headers(conn, log_config)
|> maybe_put_headers(conn, log_config)
|> maybe_put_status(conn, log_config)
|> maybe_put_query(conn, log_config)
Expand All @@ -191,6 +193,17 @@ defmodule Logster do
microseconds / 1000
end

defp maybe_put_filter_headers(fields, _conn, %{filter_headers: []}), do: fields

defp maybe_put_filter_headers(fields, conn, %{filter_headers: filter_headers}) do
headers =
conn.req_headers
|> Enum.reject(fn {k, _} -> Enum.member?(filter_headers, k) end)
|> Enum.into(%{}, fn {k, v} -> {k, v} end)

fields |> Keyword.put(:headers, headers)
end

defp maybe_put_headers(fields, _conn, %{headers: []}), do: fields

defp maybe_put_headers(fields, conn, %{headers: log_headers}) do
Expand Down
27 changes: 27 additions & 0 deletions test/logster/plug_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -282,4 +282,31 @@ defmodule Logster.PlugTest do
refute headers["my-header-two"]
refute headers["my-header-three"]
end

@tag with_config: [filter_headers: ["my-header-one"]]
test "[String] log headers with filtering by key" do
message =
conn(:post, "/hello/world", [])
|> put_req_header("my-header-one", "test-value-1")
|> put_req_header("my-header-two", "test-value-2")
|> call_and_capture_log(MyPlug)

refute message =~ ~s("test-value-1")
assert message =~ ~s("test-value-2")
end

@tag with_config: [
headers: ["my-header-one", "my-header-two"],
filter_headers: ["my-header-one"]
]
test "[String] log only specified headers even with filter_headers settings" do
message =
conn(:post, "/hello/world", [])
|> put_req_header("my-header-one", "test-value-1")
|> put_req_header("my-header-two", "test-value-2")
|> call_and_capture_log(MyPlug)

assert message =~ ~s("test-value-1")
assert message =~ ~s("test-value-2")
end
end
16 changes: 16 additions & 0 deletions test/logster_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -945,6 +945,22 @@ defmodule Logster.Test do
assert {:headers, %{"host" => "example.com", "accept" => "text/html"}} in fields
end

@tag with_config: [filter_headers: ["content-type"]]
test "adds all the headers excluding specified" do
fields =
%Plug.Conn{
state: :set_chunked,
req_headers: [
{"content-type", "application/json"},
{"host", "example.com"},
{"accept", "text/html"}
]
}
|> Logster.get_conn_fields(0)

assert {:headers, %{"host" => "example.com", "accept" => "text/html"}} in fields
end

@tag with_config: [extra_fields: [:host]]
test "includes host when enabled in config" do
fields =
Expand Down