Quick actions

cmd+k|ctrl+k

Navigation

Languages

Fast Logger

Snippet info

Language

Haskell

Visibility

public

Author

homam

Created

2018-01-11T11:43:17Z

Updated

2018-01-11T11:43:17Z

{-# 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
INFO