{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module TestLogging (
module TestLogging
) where
import qualified Control.Concurrent.Async as Async
import Control.Monad (void)
import Data.Monoid ((<>))
import System.Log.FastLogger as FL
task :: Show a => LoggerSet -> a -> IO ()
task log i =
pushLogStrLn log $ toLogStr ("hello world " ++ show i)
-- putStrLn $ "task " ++ show i
logT :: FL.ToLogStr msg => FL.TimedFastLogger -> msg -> IO ()
logT logger msg = logger $ \ft -> toLogStr ft <> toLogStr (": " :: String) <> toLogStr msg <> "\n"
task'
:: forall a. Show a => (FL.LogStr -> IO ()) -> a -> IO ()
task' logger i = do
void $ logger (toLogStr ("hello world T " ++ show i))
putStr ""
myTimeFormat :: TimeFormat
myTimeFormat = "%Y-%m-%dT%H:%M:%S%z"
main :: IO ()
main = do
log <- FL.newStdoutLoggerSet 128
print =<< Async.mapConcurrently_ void [task log i | i <- [1..10]]
FL.flushLogStr log
timeCache <- FL.newTimeCache myTimeFormat
(logger, cleanUp) <- FL.newTimedFastLogger timeCache (FL.LogStdout FL.defaultBufSize)
let myLogger = void . logT logger
void $ Async.mapConcurrently_ void [task' myLogger i | i <- [1..10]]
cleanUp