diff --git a/Network/Wai/Middleware/RequestLogger.hs b/Network/Wai/Middleware/RequestLogger.hs
--- a/Network/Wai/Middleware/RequestLogger.hs
+++ b/Network/Wai/Middleware/RequestLogger.hs
@@ -79,21 +79,19 @@
 
 mkRequestLogger :: RequestLoggerSettings -> IO Middleware
 mkRequestLogger RequestLoggerSettings{..} = do
-    callback <-
-        case destination of
-            Handle h -> return $ BS.hPutStr h . logToByteString
-            Logger l -> return $ \msg -> do
-                pushLogStr l msg
-                flushLogStr l
-            Callback c -> return c
+    let (callback, flusher) =
+            case destination of
+                Handle h -> (BS.hPutStr h . logToByteString, return ())
+                Logger l -> (pushLogStr l, flushLogStr l)
+                Callback c -> (c, return ())
     case outputFormat of
         Apache ipsrc -> do
-            getdate <- getDateGetter
+            getdate <- getDateGetter flusher
             apache <- initLogger ipsrc (LogCallback callback (return ())) getdate
             return $ apacheMiddleware apache
         Detailed useColors -> detailedMiddleware callback useColors
         CustomOutputFormat formatter -> do
-            getdate <- getDateGetter
+            getdate <- getDateGetter flusher
             return $ customMiddleware callback getdate formatter
 
 apacheMiddleware :: ApacheLoggerActions -> Middleware
diff --git a/Network/Wai/Middleware/RequestLogger/Internal.hs b/Network/Wai/Middleware/RequestLogger/Internal.hs
--- a/Network/Wai/Middleware/RequestLogger/Internal.hs
+++ b/Network/Wai/Middleware/RequestLogger/Internal.hs
@@ -9,6 +9,8 @@
 
 import Data.ByteString (ByteString)
 import Network.Wai.Logger (clockDateCacher)
+import Control.Concurrent (forkIO, threadDelay)
+import Control.Monad (forever)
 
 #if MIN_VERSION_fast_logger(2, 1, 0)
 import System.Log.FastLogger (LogStr, fromLogStr)
@@ -36,5 +38,12 @@
 
 #endif
 
-getDateGetter :: IO (IO ByteString)
-getDateGetter = fmap fst clockDateCacher
+getDateGetter :: IO () -- ^ flusher
+              -> IO (IO ByteString)
+getDateGetter flusher = do
+    (getter, updater) <- clockDateCacher
+    _ <- forkIO $ forever $ do
+        threadDelay 1000000
+        updater
+        flusher
+    return getter
diff --git a/wai-extra.cabal b/wai-extra.cabal
--- a/wai-extra.cabal
+++ b/wai-extra.cabal
@@ -1,5 +1,5 @@
 Name:                wai-extra
-Version:             2.0.3
+Version:             2.0.3.1
 Synopsis:            Provides some basic WAI handlers and middleware.
 Description:         The goal here is to provide common features without many dependencies.
 License:             MIT
