Current section

Files

Jump to
plug_accesslog lib plug accesslog formatter.ex
Raw

lib/plug/accesslog/formatter.ex

defmodule Plug.AccessLog.Formatter do
@moduledoc """
Formatting pipeline.
"""
alias Plug.AccessLog.DefaultFormatter
@formats [
agent: "%{User-Agent}i",
clf: "%h %l %u %t \"%r\" %>s %b",
clf_vhost: "%v %h %l %u %t \"%r\" %>s %b",
combined: "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"",
combined_vhost: "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"",
referer: "%{Referer}i -> %U"
]
@doc """
Formats a log message.
The `:default` format is `:clf`.
"""
@spec format(nil | atom | String.t(), Plug.Conn.t(), nil | [module]) :: String.t()
def format(nil, conn, formatters), do: format(:clf, conn, formatters)
def format(:default, conn, formatters), do: format(:clf, conn, formatters)
def format(format, conn, formatters) when is_atom(format) do
format(@formats[format], conn, formatters)
end
def format(msg, conn, nil), do: format(msg, conn, [DefaultFormatter])
def format(msg, _, []), do: msg
def format(msg, conn, [formatter | formatters]) do
msg
|> formatter.format(conn)
|> format(conn, formatters)
end
@doc """
Formats a log message.
"""
@callback format(format :: String.t(), conn :: Plug.Conn.t()) :: String.t()
end