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.
"""
use Behaviour
alias Plug.AccessLog.DefaultFormatter
# Pipeline interface
@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(atom | String.t, Plug.Conn.t, list) :: 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
# Behaviour callbacks
@doc """
Formats a log message.
"""
defcallback format(format :: String.t, conn :: Plug.Conn.t) :: String.t
end