module Magicbane.Logging (
module Magicbane.Logging
, module X
) where
import ClassyPrelude
import Data.Has
import Control.Monad.Logger as X
import System.Log.FastLogger
import System.Log.FastLogger as X (LogType(..), defaultBufSize)
newtype ModLogger = ModLogger (Loc → LogSource → LogLevel → LogStr → IO ())
instance (Has ModLogger α, Monad μ, MonadIO μ, MonadReader α μ) ⇒ MonadLogger μ where
monadLoggerLog loc src lvl msg = asks getter >>= \(ModLogger f) → liftIO (f loc src lvl $ toLogStr msg)
instance (Has ModLogger α, MonadIO μ, MonadReader α μ) ⇒ MonadLoggerIO μ where
askLoggerIO = (\(ModLogger f) → f) <$> asks getter
newLogger ∷ LogType → IO (TimedFastLogger, ModLogger)
newLogger logtype = do
tc ← newTimeCache simpleTimeFormat'
(fl, _) ← newTimedFastLogger tc logtype
return (fl, ModLogger $ \loc src lvl msg → fl (\t → toLogStr (t ++ " ") ++ defaultLogStr loc src lvl msg))