aboutsummaryrefslogtreecommitdiff
path: root/src/LogFormat.hs
blob: 0f750795cbdb87ed003b4eff5d510ddf5b43bc73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{-# LANGUAGE OverloadedStrings #-}

module LogFormat
  ( logFormat
  ) where

import qualified Data.ByteString.Char8 as BS
import Data.Maybe (fromMaybe)
import Data.Monoid ((<>))
import Network.HTTP.Types (Status(statusCode))
import Network.Wai
  ( Request
  , httpVersion
  , rawPathInfo
  , requestHeaderReferer
  , requestHeaderUserAgent
  , requestHeaders
  , requestMethod
  )
import System.Log.FastLogger (LogStr, toLogStr)

-- Sligthly modified Combined Log Format.
-- User ID extracted from the From header.
logFormat :: BS.ByteString -> Request -> Status -> Maybe Integer -> LogStr
logFormat t req st msize =
  "" <>
  toLogStr (fromMaybe "-" $ lookup "X-Forwarded-For" headers) <>
  " - " <>
  toLogStr (fromMaybe "-" $ lookup "From" headers) <>
  " [" <>
  toLogStr t <>
  "] \"" <>
  toLogStr (requestMethod req) <>
  " " <>
  toLogStr (rawPathInfo req) <>
  " " <>
  toLogStr (show $ httpVersion req) <>
  "\" " <>
  toLogStr (show $ statusCode st) <>
  " " <>
  toLogStr (maybe "-" show msize) <>
  " \"" <>
  toLogStr (fromMaybe "" $ requestHeaderReferer req) <>
  "\" \"" <> toLogStr (fromMaybe "" $ requestHeaderUserAgent req) <> "\"\n"
  where
    headers = requestHeaders req