on master help sign in
Proper usage of clockDateCacher #221
commitacf311e4182fe616311ca87962338d73a35b23a1 authorMichael Snoyman <michael@snoyman.com> dateTue 21 Jan 2014, 22:20 (13 years ago) parent3568677
3 files changed+19−12
wai-extra/Network/Wai/Middleware/RequestLogger.hs+7−9 wai-extra/Network/Wai/Middleware/RequestLogger/Internal.hs+11−2 wai-extra/wai-extra.cabal+1−1
wai-extra/Network/Wai/Middleware/RequestLogger.hs+7−9
@@ -79,21 +79,19 @@ instance Default RequestLoggerSettings where
7979
8080mkRequestLogger :: RequestLoggerSettings -> IO Middleware
8181mkRequestLogger RequestLoggerSettings{..} = do
82− callback <-
83− case destination of
84− Handle h -> return $ BS.hPutStr h . logToByteString
85− Logger l -> return $ \msg -> do
86− pushLogStr l msg
87− flushLogStr l
88− Callback c -> return c
82+ let (callback, flusher) =
83+ case destination of
84+ Handle h -> (BS.hPutStr h . logToByteString, return ())
85+ Logger l -> (pushLogStr l, flushLogStr l)
86+ Callback c -> (c, return ())
8987 case outputFormat of
9088 Apache ipsrc -> do
91− getdate <- getDateGetter
89+ getdate <- getDateGetter flusher
9290 apache <- initLogger ipsrc (LogCallback callback (return ())) getdate
9391 return $ apacheMiddleware apache
9492 Detailed useColors -> detailedMiddleware callback useColors
9593 CustomOutputFormat formatter -> do
96− getdate <- getDateGetter
94+ getdate <- getDateGetter flusher
9795 return $ customMiddleware callback getdate formatter
9896
9997apacheMiddleware :: ApacheLoggerActions -> Middleware
wai-extra/Network/Wai/Middleware/RequestLogger/Internal.hs+11−2
@@ -9,6 +9,8 @@ module Network.Wai.Middleware.RequestLogger.Internal
99
1010import Data.ByteString (ByteString)
1111import Network.Wai.Logger (clockDateCacher)
12+import Control.Concurrent (forkIO, threadDelay)
13+import Control.Monad (forever)
1214
1315#if MIN_VERSION_fast_logger(2, 1, 0)
1416import System.Log.FastLogger (LogStr, fromLogStr)
@@ -36,5 +38,12 @@ logToByteString = toByteString . logStrBuilder
3638
3739#endif
3840
39−getDateGetter :: IO (IO ByteString)
40−getDateGetter = fmap fst clockDateCacher
41+getDateGetter :: IO () -- ^ flusher
42+ -> IO (IO ByteString)
43+getDateGetter flusher = do
44+ (getter, updater) <- clockDateCacher
45+ _ <- forkIO $ forever $ do
46+ threadDelay 1000000
47+ updater
48+ flusher
49+ return getter
wai-extra/wai-extra.cabal+1−1
@@ -1,5 +1,5 @@
11Name: wai-extra
2−Version: 2.0.3
2+Version: 2.0.3.1
33Synopsis: Provides some basic WAI handlers and middleware.
44Description: The goal here is to provide common features without many dependencies.
55License: MIT