module Blammo.Logging
( LogSettings
, LogLevel(..)
, LogDestination(..)
, LogFormat(..)
, LogColor(..)
, defaultLogSettings
, setLogSettingsLevels
, setLogSettingsDestination
, setLogSettingsFormat
, setLogSettingsColor
, Logger
, HasLogger(..)
, newLogger
, runLoggerLoggingT
, Message(..)
, (.=)
, Series
, MonadMask
, withThreadContext
, myThreadContext
, Pair
, MonadLogger(..)
, MonadLoggerIO(..)
, LoggingT
, logDebug
, logInfo
, logWarn
, logError
, logOther
, logDebugNS
, logInfoNS
, logWarnNS
, logErrorNS
, logOtherNS
) where
import Prelude
import Blammo.Logging.LogSettings
import Blammo.Logging.Logger
import Control.Lens ((^.))
import Control.Monad.Catch (MonadMask)
import Control.Monad.IO.Class (MonadIO(..))
import Control.Monad.Logger.Aeson
import Data.Aeson (Series)
import Data.Aeson.Types (Pair)
import Data.ByteString (ByteString)
import System.Log.FastLogger (LoggerSet, flushLogStr, pushLogStrLn)
runLoggerLoggingT :: (MonadIO m, HasLogger env) => env -> LoggingT m a -> m a
runLoggerLoggingT :: env -> LoggingT m a -> m a
runLoggerLoggingT env
env LoggingT m a
f = do
a
a <- LoggingT m a
-> (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> m a
forall (m :: * -> *) a.
LoggingT m a
-> (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> m a
runLoggingT
((LogSource -> LogLevel -> Bool) -> LoggingT m a -> LoggingT m a
forall (m :: * -> *) a.
(LogSource -> LogLevel -> Bool) -> LoggingT m a -> LoggingT m a
filterLogger (Logger -> LogSource -> LogLevel -> Bool
getLoggerShouldLog Logger
logger) LoggingT m a
f)
(LoggerSet
-> (LogLevel -> ByteString -> ByteString)
-> Loc
-> LogSource
-> LogLevel
-> LogStr
-> IO ()
loggerOutput LoggerSet
loggerSet ((LogLevel -> ByteString -> ByteString)
-> Loc -> LogSource -> LogLevel -> LogStr -> IO ())
-> (LogLevel -> ByteString -> ByteString)
-> Loc
-> LogSource
-> LogLevel
-> LogStr
-> IO ()
forall a b. (a -> b) -> a -> b
$ Logger -> LogLevel -> ByteString -> ByteString
getLoggerReformat Logger
logger)
a
a a -> m () -> m a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (LoggerSet -> IO ()
flushLogStr LoggerSet
loggerSet)
where
logger :: Logger
logger = env
env env -> Getting Logger env Logger -> Logger
forall s a. s -> Getting a s a -> a
^. Getting Logger env Logger
forall env. HasLogger env => Lens' env Logger
loggerL
loggerSet :: LoggerSet
loggerSet = Logger -> LoggerSet
getLoggerLoggerSet Logger
logger
loggerOutput
:: LoggerSet
-> (LogLevel -> ByteString -> ByteString)
-> Loc
-> LogSource
-> LogLevel
-> LogStr
-> IO ()
loggerOutput :: LoggerSet
-> (LogLevel -> ByteString -> ByteString)
-> Loc
-> LogSource
-> LogLevel
-> LogStr
-> IO ()
loggerOutput LoggerSet
loggerSet LogLevel -> ByteString -> ByteString
reformat =
OutputOptions -> Loc -> LogSource -> LogLevel -> LogStr -> IO ()
defaultOutputWith (OutputOptions -> Loc -> LogSource -> LogLevel -> LogStr -> IO ())
-> OutputOptions -> Loc -> LogSource -> LogLevel -> LogStr -> IO ()
forall a b. (a -> b) -> a -> b
$ (LogLevel -> ByteString -> IO ()) -> OutputOptions
defaultOutputOptions ((LogLevel -> ByteString -> IO ()) -> OutputOptions)
-> (LogLevel -> ByteString -> IO ()) -> OutputOptions
forall a b. (a -> b) -> a -> b
$ \LogLevel
logLevel ByteString
bytes -> do
LoggerSet -> LogStr -> IO ()
pushLogStrLn LoggerSet
loggerSet (LogStr -> IO ()) -> LogStr -> IO ()
forall a b. (a -> b) -> a -> b
$ ByteString -> LogStr
forall msg. ToLogStr msg => msg -> LogStr
toLogStr (ByteString -> LogStr) -> ByteString -> LogStr
forall a b. (a -> b) -> a -> b
$ LogLevel -> ByteString -> ByteString
reformat LogLevel
logLevel ByteString
bytes