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