module Imm.Logger.Simple (module Imm.Logger.Simple, module Reexport) where
import Imm.Logger as Reexport
import Imm.Prelude
import System.Log.FastLogger as Reexport
data LoggerSettings = LoggerSettings
{ loggerSet :: LoggerSet
, errorLoggerSet :: LoggerSet
, logLevel :: LogLevel
}
defaultLogger :: IO LoggerSettings
defaultLogger = LoggerSettings
<$> newStdoutLoggerSet defaultBufSize
<*> newStderrLoggerSet defaultBufSize
<*> pure Info
mkCoLogger :: (MonadIO m) => LoggerSettings -> CoLoggerF m LoggerSettings
mkCoLogger settings = CoLoggerF coLog coGetLevel coSetLevel where
coLog Error t = do
io $ pushLogStrLn (errorLoggerSet settings) $ toLogStr $ "ERROR: " <> t
return settings
coLog l t = do
when (l >= logLevel settings) $ io $ pushLogStrLn (loggerSet settings) $ toLogStr $ show (pretty l) <> ": " <> t
return settings
coGetLevel = return (logLevel settings, settings)
coSetLevel l = return $ settings { logLevel = l }