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