on master help sign in
Debug deprecated in favor of RequestLogger
commitdddb763d2fe0534e5381f0c0851048cb867aad4e authorGreg Weber <greg@gregweber.info> dateSun 25 Dec 2011, 22:15 (15 years ago) parent8694ae7
4 files changed+61−62
scripts+1−1 wai-extra/Network/Wai/Middleware/Debug.hs+9−49 wai-extra/Network/Wai/Middleware/RequestLogger.hs+49−10 warp-static/warp.hs+2−2
scripts+1−1

Submodule changed.

wai-extra/Network/Wai/Middleware/Debug.hs+9−49
@@ -1,57 +1,17 @@
1−{-# LANGUAGE OverloadedStrings #-}
21module Network.Wai.Middleware.Debug
2+ {-# DEPRECATED "functionality has been moved to the better named Network.Wai.Middleware.RequestLogger. Network.Wai.Middleware.Debug will be removed." #-}
33 ( debug
44 , debugHandle
55 ) where
66
7−import Network.Wai (Request(..), Middleware)
8−import Network.Wai.Parse (parseRequestBody, lbsSink, fileName, Param, File)
9−import Data.ByteString.Char8 (unpack)
10−import qualified Data.ByteString as S
11−import qualified Data.ByteString.Lazy as L
12−import System.IO (hPutStrLn, stderr)
13−import Control.Monad.IO.Class (liftIO)
14−import qualified Data.Text.Lazy as T
15−import Data.Enumerator (run_, ($$), enumList)
16−import Data.Enumerator.List (consume)
7+import Network.Wai.Middleware.RequestLogger (logStdoutDevLT, logHandleDevLT)
8+import Network.Wai (Middleware)
9+import qualified Data.Text.Lazy as LT
1710
18−-- | Prints a message to 'stderr' for each request.
11+-- | Deprecated. Use module Network.Wai.Middleware.RequestLogger
1912debug :: Middleware
20−debug = debugHandle $ hPutStrLn stderr . T.unpack
13+debug = logStdoutDevLT
2114
22−-- | Prints a message using the given callback function for each request.
23−-- This is not for serious production use- it is inefficient.
24−-- It immediately consumes a POST body and fills it back in and is otherwise inefficient
25−-- For production use use module Network.Wai.Middleware.RequestLogger
26−debugHandle :: (T.Text -> IO ()) -> Middleware
27−debugHandle cb app req = do
28− body <- consume
29− postParams <- if any (requestMethod req ==) ["GET", "HEAD"]
30− then return []
31− else do postParams <- liftIO $ allPostParams req body
32− return $ collectPostParams postParams
33− let getParams = map emptyGetParam $ queryString req
34−
35− liftIO $ cb $ T.pack $ concat
36− [ unpack $ requestMethod req
37− , " "
38− , unpack $ rawPathInfo req
39− , "\n"
40− , (++) "Accept: " $ maybe "" unpack $ lookup "Accept" $ requestHeaders req
41− , paramsToStr "GET " getParams
42− , paramsToStr "POST " postParams
43− ]
44− -- we just consumed the body- fill the enumerator back up so it is available again
45− liftIO $ run_ $ enumList 1 body $$ app req
46− where
47− paramsToStr prefix params = if null params then "" else "\n" ++ prefix ++ (show params)
48−
49− allPostParams req' body = run_ $ enumList 1 body $$ parseRequestBody lbsSink req'
50−
51− emptyGetParam :: (S.ByteString, Maybe S.ByteString) -> (S.ByteString, S.ByteString)
52− emptyGetParam (k, Just v) = (k,v)
53− emptyGetParam (k, Nothing) = (k,"")
54−
55− collectPostParams :: ([Param], [File L.ByteString]) -> [Param]
56− collectPostParams (postParams, files) = postParams ++
57− (map (\(k,v) -> (k, S.append "FILE: " (fileName v))) files)
15+-- | Deprecated. Use module Network.Wai.Middleware.RequestLogger
16+debugHandle :: (LT.Text -> IO ()) -> Middleware
17+debugHandle = logHandleDevLT
wai-extra/Network/Wai/Middleware/RequestLogger.hs+49−10
@@ -2,12 +2,10 @@
22module Network.Wai.Middleware.RequestLogger
33 ( logStdout
44 , logHandle
5− , logStdoutDev
5+ , logStdoutDevLT
66 , logHandleDevLT
77 ) where
88
9−import Network.Wai.Middleware.Debug (debug, debugHandle)
10−
119import System.IO (stdout)
1210import qualified Data.ByteString as BS
1311import Control.Monad.IO.Class (liftIO)
@@ -16,13 +14,12 @@ import System.Log.FastLogger
1614import Network.HTTP.Types as H
1715import qualified Data.Text.Lazy as LT
1816
19−-- | Inefficient, but convenient Development load logger middleware
20−logStdoutDev :: Middleware
21−logStdoutDev = debug
22−
23−-- | Inefficient, but convenient Development load logger middleware
24−logHandleDevLT :: (LT.Text -> IO ()) -> Middleware
25−logHandleDevLT = debugHandle
17+import Network.Wai.Parse (parseRequestBody, lbsSink, fileName, Param, File)
18+import qualified Data.ByteString.Lazy as LBS
19+import Data.Enumerator (run_, ($$), enumList)
20+import Data.Enumerator.List (consume)
21+import System.IO (hPutStrLn, stderr)
22+import Data.ByteString.Char8 (unpack)
2623
2724-- | lik @logHandle@, but prints to 'stdout'
2825logStdout :: Middleware
@@ -47,3 +44,45 @@ logHandle cb app req = do
4744
4845toBS :: H.Ascii -> BS.ByteString
4946toBS = id
47+
48+-- | Inefficient, but convenient Development load logger middleware
49+-- Prints a message to 'stderr' for each request using logHandleDevLT
50+logStdoutDevLT :: Middleware
51+logStdoutDevLT = logHandleDevLT $ hPutStrLn stderr . LT.unpack
52+
53+-- | Prints a message using the given callback function for each request.
54+-- This is not for serious production use- it is inefficient.
55+-- It immediately consumes a POST body and fills it back in and is otherwise inefficient
56+-- For production use use module Network.Wai.Middleware.RequestLogger
57+logHandleDevLT :: (LT.Text -> IO ()) -> Middleware
58+logHandleDevLT cb app req = do
59+ body <- consume
60+ postParams <- if any (requestMethod req ==) ["GET", "HEAD"]
61+ then return []
62+ else do postParams <- liftIO $ allPostParams req body
63+ return $ collectPostParams postParams
64+ let getParams = map emptyGetParam $ queryString req
65+
66+ liftIO $ cb $ LT.pack $ concat
67+ [ unpack $ requestMethod req
68+ , " "
69+ , unpack $ rawPathInfo req
70+ , "\n"
71+ , (++) "Accept: " $ maybe "" unpack $ lookup "Accept" $ requestHeaders req
72+ , paramsToStr "GET " getParams
73+ , paramsToStr "POST " postParams
74+ ]
75+ -- we just consumed the body- fill the enumerator back up so it is available again
76+ liftIO $ run_ $ enumList 1 body $$ app req
77+ where
78+ paramsToStr prefix params = if null params then "" else "\n" ++ prefix ++ (show params)
79+
80+ allPostParams req' body = run_ $ enumList 1 body $$ parseRequestBody lbsSink req'
81+
82+ emptyGetParam :: (BS.ByteString, Maybe BS.ByteString) -> (BS.ByteString, BS.ByteString)
83+ emptyGetParam (k, Just v) = (k,v)
84+ emptyGetParam (k, Nothing) = (k,"")
85+
86+ collectPostParams :: ([Param], [File LBS.ByteString]) -> [Param]
87+ collectPostParams (postParams, files) = postParams ++
88+ (map (\(k,v) -> (k, BS.append "FILE: " (fileName v))) files)
warp-static/warp.hs+2−2
@@ -13,7 +13,7 @@ import Text.Printf (printf)
1313import System.Directory (canonicalizePath)
1414import Control.Monad (unless)
1515import Network.Wai.Middleware.Autohead
16−import Network.Wai.Middleware.Debug
16+import Network.Wai.Middleware.RequestLogger (logStdout)
1717import Network.Wai.Middleware.Gzip
1818import qualified Data.Map as Map
1919import qualified Data.ByteString.Char8 as S8
@@ -43,7 +43,7 @@ main = do
4343 docroot' <- canonicalizePath docroot
4444 unless quiet $ printf "Serving directory %s on port %d with %s index files.\n" docroot' port (if noindex then "no" else show index)
4545 let middle = gzip False
46− . (if verbose then debug else id)
46+ . (if verbose then logStdout else id)
4747 . autohead
4848 runSettings defaultSettings
4949 { settingsPort = port