Packages
timber
2.3.0
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber/events/http_server_response_event.ex
defmodule Timber.Events.HTTPServerResponseEvent do
@moduledoc """
The `HTTPServerResponseEvent` tracks responses for *incoming* HTTP *requests*. In other words,
the resposnes you are sending back to your clients. This gives you structured insight into
the response you are sending back to your clients.
Timber can automatically track response events if you use a `Plug` based framework
through `Timber.Plug`.
"""
alias Timber.Utils.HTTPEvents, as: UtilsHTTPEvents
@type t :: %__MODULE__{
body: String.t | nil,
headers: map,
request_id: Strin.t | nil,
status: pos_integer,
time_ms: float
}
@enforce_keys [:status, :time_ms]
defstruct [:body, :headers, :request_id, :status, :time_ms]
@doc """
Builds a new struct taking care to:
* Normalize header values so they are consistent.
* Removes "" or nil values.
"""
@spec new(Keyword.t) :: t
def new(opts) do
opts =
opts
|> Keyword.delete(:body) # Don't store the body for now. We store the params in the ControllerCallEvent. We can re-enable this upon request.
|> Keyword.update(:headers, nil, fn headers -> UtilsHTTPEvents.normalize_headers(headers) end)
|> Enum.filter(fn {_k,v} -> !(v in [nil, ""]) end)
struct!(__MODULE__, opts)
end
@doc """
Message to be used when logging.
"""
@spec message(t) :: IO.chardata
def message(%__MODULE__{status: status, time_ms: time_ms}),
do: ["Sent ", Integer.to_string(status), " in ", UtilsHTTPEvents.format_time_ms(time_ms)]
end