{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoImplicitPrelude #-} module Com.MusicMeetsComics.Server.Logger ( adapt , defaultLogEnv , logMsg , runKatipT , KatipT(..) , Katip(..) , LogEnv , Severity(..) ) where import Control.Monad.Logger import qualified Control.Monad.Logger as Logger import Katip import Protolude import qualified System.IO as IO import qualified System.Log.FastLogger as FastLogger defaultLogEnv :: IO LogEnv defaultLogEnv = do handleScribe <- mkHandleScribe ColorIfTerminal IO.stdout DebugS V2 env <- initLogEnv "hero" "production" registerScribe "stdout" handleScribe defaultScribeSettings env fromLevel :: LogLevel -> Severity fromLevel LevelDebug = DebugS fromLevel LevelInfo = InfoS fromLevel LevelWarn = WarningS fromLevel LevelError = ErrorS fromLevel (LevelOther _) = NoticeS -- | Transforms Katip logMsg into monadLoggerLog to be used inside -- MonadLogger monad adapt :: (ToLogStr msg, Applicative m, Katip m) => (Namespace -> Severity -> Katip.LogStr -> m ()) -> Loc -> LogSource -> LogLevel -> msg -> m () adapt f _ src lvl msg = f ns (fromLevel lvl) $ logStr' msg where ns = Namespace [src] -- not sure how fast this is going to be logStr' = Katip.logStr . FastLogger.fromLogStr . Logger.toLogStr