on master help sign in
log response status in development

we should do this in production too. Note though, that it means logging *after* the request has completed. Logging only after has some downside. The slowloris attack against Apache is an example: the request never gets logged before the server is crashed.

commit91bd2990b5bbfeb66028bb1e4c59bbb795ff4431 authorGreg Weber <greg@gregweber.info> dateFri 10 Feb 2012, 08:09 (15 years ago) parenta07b05a
1 file changed+12−3
wai-extra/Network/Wai/Middleware/RequestLogger.hs+12−3
wai-extra/Network/Wai/Middleware/RequestLogger.hs+12−3
@@ -13,7 +13,7 @@ import System.IO (stdout, hFlush)
1313import qualified Data.ByteString as BS
1414import Data.ByteString.Char8 (pack)
1515import Control.Monad.IO.Class (liftIO)
16−import Network.Wai (Request(..), Middleware)
16+import Network.Wai (Request(..), Middleware, responseStatus)
1717import System.Log.FastLogger
1818import Network.HTTP.Types as H
1919
@@ -90,11 +90,20 @@ logCallbackDev cb app req = do
9090 , maybe "" id $ lookup "Accept" $ requestHeaders req
9191 , paramsToBS "GET " getParams
9292 , paramsToBS "POST " postParams
93− , "\n"
9493 ]
9594 -- The body was consumed. Fill it back up so it is available again
96− app req { requestBody = CL.sourceList body }
95+ rsp <- app req { requestBody = CL.sourceList body }
96+ liftIO $ cb $ BS.concat [
97+ "Status: "
98+ , code rsp
99+ , " "
100+ , msg rsp
101+ , "\n"
102+ ]
103+ return rsp
97104 where
105+ code = pack . show . statusCode . responseStatus
106+ msg = statusMessage . responseStatus
98107 paramsToBS prefix params =
99108 if null params then ""
100109 else BS.concat ["\n", prefix, pack (show params)]