{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE OverloadedStrings #-} module Control.Log ( message , value , error , runLogger , runLoggerOff , MonadLogger , bs , lbs , sanitize ) where -- import Control.Lens ((^.)) import Prelude hiding (error) import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy as BL import Control.Monad.IO.Class (MonadIO) import Control.Monad.Logger (runStdoutLoggingT, runNoLoggingT, LoggingT, NoLoggingT, MonadLogger, logInfoNS) import Data.Monoid ((<>)) import Data.Text (Text, pack, replace) import Data.Text.Encoding (decodeUtf8) import qualified Data.Text.Lazy.Encoding as LT import qualified Data.Text.Lazy as LT type Section = Text message :: MonadLogger m => Section -> Text -> m () message = logInfoNS value :: (Show a) => a -> Text value = pack . show bs :: ByteString -> Text bs = decodeUtf8 lbs :: BL.ByteString -> Text lbs = LT.toStrict . LT.decodeUtf8 sanitize :: Text -> BL.ByteString -> Text sanitize n h = replace n "xxx" $ lbs h error :: MonadLogger m => Section -> Text -> m () error s t = message ("ERROR | " <> s) t runLogger :: MonadIO m => LoggingT m a -> m a runLogger = runStdoutLoggingT runLoggerOff :: NoLoggingT m a -> m a runLoggerOff = runNoLoggingT