@@ -24,7 +24,11 @@ import qualified Blaze.ByteString.Builder as B
2424import qualified Data.ByteString as BS
2525import Data.ByteString.Char8 (pack, unpack)
2626import Control.Monad.IO.Class (liftIO)
27−import Network.Wai (Request(..), Middleware, responseStatus, Response, responseHeaders)
27+import Network.Wai
28+ ( Request(..), requestBodyLength, RequestBodyLength(..)
29+ , Middleware
30+ , Response, responseStatus, responseHeaders
31+ )
2832import System.Log.FastLogger
2933import Network.HTTP.Types as H
3034import Data.Maybe (fromMaybe)
@@ -41,6 +45,7 @@ import Network.Wai.Internal (Response (..))
4145import Data.Default.Class (Default (def))
4246import Network.Wai.Logger
4347import Network.Wai.Middleware.RequestLogger.Internal
48+import Network.Wai.Header (contentLength)
4449import Data.Text.Encoding (decodeUtf8')
4550
4651data OutputFormat = Apache IPAddrSource
@@ -106,11 +111,7 @@ mkRequestLogger RequestLoggerSettings{..} = do
106111
107112apacheMiddleware :: ApacheLoggerActions -> Middleware
108113apacheMiddleware ala app req sendResponse = app req $ \res -> do
109− let msize = lookup H.hContentLength (responseHeaders res) >>= readInt'
110− readInt' bs =
111− case S8.readInteger bs of
112− Just (i, "") -> Just i
113− _ -> Nothing
114+ let msize = contentLength (responseHeaders res)
114115 apacheLogger ala req (responseStatus res) msize
115116 sendResponse res
116117
@@ -246,11 +247,10 @@ detailedMiddleware' :: Callback
246247 -> (BS.ByteString -> BS.ByteString -> [BS.ByteString])
247248 -> Middleware
248249detailedMiddleware' cb ansiColor ansiMethod ansiStatusCode app req sendResponse = do
249− let mlen = lookup H.hContentLength (requestHeaders req) >>= readInt
250250 (req', body) <-
251− case mlen of
251+ case requestBodyLength req of
252252 -- log the request body if it is small
253− Just len | len <= 2048 -> getRequestBody req
253+ KnownLength len | len <= 2048 -> getRequestBody req
254254 _ -> return (req, [])
255255
256256 let reqbodylog _ = if null body then [""] else ansiColor White " Request Body: " <> body <> ["\n"]
@@ -308,10 +308,7 @@ detailedMiddleware' cb ansiColor ansiMethod ansiStatusCode app req sendResponse
308308 collectPostParams (postParams, files) = postParams ++
309309 map (\(k,v) -> (k, "FILE: " <> fileName v)) files
310310
311− readInt bs =
312− case reads $ unpack bs of
313− (i, _):_ -> Just (i :: Int)
314− [] -> Nothing
311+
315312
316313statusBS :: Response -> BS.ByteString
317314statusBS = pack . show . statusCode . responseStatus