module Hack.Contrib.Middleware.SimpleAccessLogger (simple_access_logger) where
import Data.Maybe
import Hack
import Hack.Contrib.Request hiding (referer)
import Hack.Contrib.Constants
import Hack.Contrib.Utils
import MPS (simple_time_format)
import MPS.Env
import Data.Maybe
import Prelude ()
import qualified Data.ByteString.Char8 as B
import System.IO
simple_access_logger :: Maybe (String -> IO ()) -> Middleware
simple_access_logger stream app = \env -> do
r <- app env
time <- now ^ format_time simple_time_format
let puts' x = x.B.pack.B.putStrLn >> hFlush stdout
puts = stream.fromMaybe puts'
method = env.request_method.show
http_status = env.hack_url_scheme.show
access_path = env.fullpath.unescape_uri
fields =
[ env.remote_host
, "-"
, "[" ++ time ++ "]"
, "\"" ++ method ++ " " ++ access_path ++ " " ++ http_status ++ "\""
, r.status.show
, r.headers.get _ContentLength .fromMaybe "-"
]
puts fields.join " "
return r