module Network.Wai.Middleware.RequestLogger.Internal
( module Network.Wai.Middleware.RequestLogger.Internal
, logToByteString
) where
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)
logToByteString :: LogStr -> ByteString
logToByteString = fromLogStr
#else
import System.Log.FastLogger (LogStr, logStrBuilder)
#if MIN_VERSION_bytestring(0, 10, 2)
import Data.ByteString.Builder (toLazyByteString, Builder)
import qualified Data.ByteString.Lazy as L
toByteString :: Builder -> ByteString
toByteString = L.toStrict . toLazyByteString
#else
import Blaze.ByteString.Builder (toByteString)
#endif
logToByteString :: LogStr -> ByteString
logToByteString = toByteString . logStrBuilder
#endif
getDateGetter :: IO ()
-> IO (IO ByteString)
getDateGetter flusher = do
(getter, updater) <- clockDateCacher
_ <- forkIO $ forever $ do
threadDelay 1000000
updater
flusher
return getter