Skip to content
Merged
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
9 changes: 8 additions & 1 deletion lib/plug/cowboy/translator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,16 @@ defmodule Plug.Cowboy.Translator do
| Exception.format(:exit, reason, [])
]

crash_reason =
case reason do
{exception, _stack} when is_exception(exception) -> reason
{{:nocatch, _value}, _stack} -> reason
exit_reason -> {exit_reason, []}
end

metadata =
[
crash_reason: reason,
crash_reason: crash_reason,
domain: [:cowboy]
] ++ maybe_conn_metadata(conn)

Expand Down
34 changes: 34 additions & 0 deletions test/plug/cowboy/translator_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ defmodule Plug.Cowboy.TranslatorTest do
fn -> GenServer.call(:i_dont_exist, :ok) end |> Task.async() |> Task.await()
end

def call(%{path_info: ["exit"]}, _opts) do
exit({:error, ["unfortunate shape"]})
end

def call(%{path_info: ["throw"]}, _opts) do
throw("catch!")
end

@metadata_log_opts format: {__MODULE__, :metadata}, metadata: [:conn, :crash_reason, :domain]

def metadata(_log_level, _message, _timestamp, metadata) do
Expand Down Expand Up @@ -144,4 +152,30 @@ defmodule Plug.Cowboy.TranslatorTest do
assert metadata =~ "{GenServer, :call"
assert metadata =~ "domain: [:cowboy]"
end

test "metadata in ranch/cowboy exit logs" do
{:ok, _pid} = Plug.Cowboy.http(__MODULE__, [], port: 9005)

metadata =
capture_log(@metadata_log_opts, fn ->
:hackney.get("http://127.0.0.1:9005/exit", [], "", [])
Plug.Cowboy.shutdown(__MODULE__.HTTP)
end)

assert metadata =~ "crash_reason: {{:error, [\"unfortunate shape\"]}, []}"
assert metadata =~ "domain: [:cowboy]"
end

test "metadata in ranch/cowboy throw logs" do
{:ok, _pid} = Plug.Cowboy.http(__MODULE__, [], port: 9005)

metadata =
capture_log(@metadata_log_opts, fn ->
:hackney.get("http://127.0.0.1:9005/throw", [], "", [])
Plug.Cowboy.shutdown(__MODULE__.HTTP)
end)

assert metadata =~ "crash_reason: {{:nocatch, \"catch!\"}, "
assert metadata =~ "domain: [:cowboy]"
end
end
Loading