on master help sign in
add RequestLogger that uses fast-logger
commit64d1c82fe9c405bd117599cee2a32a0b8553f2d2 authorGreg Weber <greg@gregweber.info> dateSun 25 Dec 2011, 09:46 (15 years ago) parent3d750a5
3 files changed+52
wai-extra/Network/Wai/Middleware/Debug.hs+1 wai-extra/Network/Wai/Middleware/RequestLogger.hs+49 wai-extra/wai-extra.cabal+2
wai-extra/Network/Wai/Middleware/Debug.hs+1
@@ -22,6 +22,7 @@ debug = debugHandle $ hPutStrLn stderr . T.unpack
2222-- | Prints a message using the given callback function for each request.
2323-- This is not for serious production use- it is inefficient.
2424-- 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
2526debugHandle :: (T.Text -> IO ()) -> Middleware
2627debugHandle cb app req = do
2728 body <- consume
wai-extra/Network/Wai/Middleware/RequestLogger.hsnew file+49
@@ -0,0 +1,49 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+module Network.Wai.Middleware.RequestLogger
3+ ( logStdout
4+ , logHandle
5+ , logStdoutDev
6+ , logHandleDevLT
7+ ) where
8+
9+import Network.Wai.Middleware.Debug (debug, debugHandle)
10+
11+import System.IO (stdout)
12+import qualified Data.ByteString as BS
13+import Control.Monad.IO.Class (liftIO)
14+import Network.Wai (Request(..), Middleware)
15+import System.Log.FastLogger
16+import Network.HTTP.Types as H
17+import qualified Data.Text.Lazy as LT
18+
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
26+
27+-- | lik @logHandle@, but prints to 'stdout'
28+logStdout :: Middleware
29+logStdout = logHandle $ \bs -> hPutLogStr stdout [LB bs]
30+
31+-- | Prints a message using the given callback function for each request.
32+-- Designed for fast production use at the expense of convenience.
33+-- In particular, no POST parameter information is currently given
34+-- For something with more useful output, use Network.Wai.Middleware.Debug
35+logHandle :: (BS.ByteString -> IO ()) -> Middleware
36+logHandle cb app req = do
37+ liftIO $ cb $ BS.concat
38+ [ requestMethod req
39+ , " "
40+ , rawPathInfo req
41+ , rawQueryString req
42+ , " "
43+ , "Accept: "
44+ , maybe "" toBS $ lookup "Accept" $ requestHeaders req
45+ ]
46+ app req
47+
48+toBS :: H.Ascii -> BS.ByteString
49+toBS = id
wai-extra/wai-extra.cabal+2
@@ -37,12 +37,14 @@ Library
3737 , case-insensitive >= 0.2
3838 , zlib-enum >= 0.2.1 && < 0.3
3939 , data-default >= 0.3 && < 0.4
40+ , fast-logger >= 0.0.1
4041
4142 Exposed-modules: Network.Wai.Handler.CGI
4243 Network.Wai.Middleware.AcceptOverride
4344 Network.Wai.Middleware.Autohead
4445 Network.Wai.Middleware.CleanPath
4546 Network.Wai.Middleware.Debug
47+ Network.Wai.Middleware.RequestLogger
4648 Network.Wai.Middleware.Gzip
4749 Network.Wai.Middleware.Jsonp
4850 Network.Wai.Middleware.MethodOverride