aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2016-06-11 16:46:49 +0800
committerIgor Pashev <pashev.igor@gmail.com>2016-06-11 16:46:49 +0800
commit843d0dca7ed054c1c65661662044bf8bcd51528c (patch)
tree338683abb3514d86d7bb99c8d536ea5a18ef0c75 /src
parent0fa01348c73096b25fdd233c7a5777cc9d7dd46e (diff)
downloadjuandelacosa-843d0dca7ed054c1c65661662044bf8bcd51528c.tar.gz
Log user ID
Diffstat (limited to 'src')
-rw-r--r--src/Application.hs10
-rw-r--r--src/LogFormat.hs40
2 files changed, 47 insertions, 3 deletions
diff --git a/src/Application.hs b/src/Application.hs
index b3d7fb1..616532c 100644
--- a/src/Application.hs
+++ b/src/Application.hs
@@ -12,11 +12,11 @@ import Data.Default.Class (def)
import Data.Pool (Pool, withResource)
import Data.Text.Lazy.Encoding (encodeUtf8, decodeUtf8)
import Database.MySQL.Simple (Connection, Only(..), query, execute)
-import Network.HTTP.Types (notFound404, badRequest400)
+import Network.HTTP.Types (notFound404, badRequest400)
import Network.Wai (Application, Middleware)
import Network.Wai.Middleware.RequestLogger (Destination(Handle),
mkRequestLogger, RequestLoggerSettings(destination, outputFormat),
- OutputFormat(Apache), IPAddrSource(FromHeader))
+ OutputFormat(CustomOutputFormat))
import Network.Wai.Middleware.Static (addBase, hasPrefix, staticPolicy, (>->))
import System.Entropy (getEntropy)
import System.IO (stderr)
@@ -25,9 +25,13 @@ import Web.Scotty (ScottyM, ActionM, header, middleware, file, get, post,
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as LBS
+import LogFormat (logFormat)
+
+
app :: Pool Connection -> FilePath -> IO Application
app p f = do
- logger <- mkRequestLogger def{ destination = Handle stderr, outputFormat = Apache FromHeader }
+ logger <- mkRequestLogger def{ destination = Handle stderr
+ , outputFormat = CustomOutputFormat logFormat }
scottyApp (juanDeLaCosa p logger f)
juanDeLaCosa :: Pool Connection -> Middleware -> FilePath -> ScottyM ()
diff --git a/src/LogFormat.hs b/src/LogFormat.hs
new file mode 100644
index 0000000..51c36c6
--- /dev/null
+++ b/src/LogFormat.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module LogFormat (
+ logFormat
+) where
+
+import Data.Maybe (fromMaybe)
+import Data.Monoid ((<>))
+import Network.HTTP.Types (Status(statusCode))
+import Network.Wai (Request, httpVersion, requestHeaders, requestMethod,
+ rawPathInfo, requestHeaderReferer, requestHeaderUserAgent)
+import System.Log.FastLogger (LogStr, toLogStr)
+import qualified Data.ByteString.Char8 as BS
+
+-- Sligthly modified Common 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
+