-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | A class of monads which can log messages.
--   
--   Hackage documentation generation is not reliable. For up to date
--   documentation, please see:
--   <a>http://www.stackage.org/package/monad-logger</a>.
@package monad-logger
@version 0.3.13.1


-- | This module provides the facilities needed for a decoupled logging
--   system.
--   
--   The <a>MonadLogger</a> class is implemented by monads that give access
--   to a logging facility. If you're defining a custom monad, then you may
--   define an instance of <a>MonadLogger</a> that routes the log messages
--   to the appropriate place (e.g., that's what <tt>yesod-core</tt>'s
--   <tt>GHandler</tt> does). Otherwise, you may use the <a>LoggingT</a>
--   monad included in this module (see <a>runStderrLoggingT</a>). To
--   simply discard log message, use <a>NoLoggingT</a>.
--   
--   As a user of the logging facility, we provide you some convenient
--   Template Haskell splices that use the <a>MonadLogger</a> class. They
--   will record their source file and position, which is very helpful when
--   debugging. See <a>logDebug</a> for more information.
module Control.Monad.Logger

-- | A <tt>Monad</tt> which has the ability to log messages in some manner.
class Monad m => MonadLogger m
monadLoggerLog :: (MonadLogger m, ToLogStr msg) => Loc -> LogSource -> LogLevel -> msg -> m ()

-- | An extension of <tt>MonadLogger</tt> for the common case where the
--   logging action is a simple <tt>IO</tt> action. The advantage of using
--   this typeclass is that the logging function itself can be extracted as
--   a first-class value, which can make it easier to manipulate monad
--   transfomrer stacks, as an example.
--   
--   Since 0.3.10
class (MonadLogger m, MonadIO m) => MonadLoggerIO m where askLoggerIO = lift askLoggerIO
askLoggerIO :: MonadLoggerIO m => m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
data LogLevel
LevelDebug :: LogLevel
LevelInfo :: LogLevel
LevelWarn :: LogLevel
LevelError :: LogLevel
LevelOther :: Text -> LogLevel
type LogSource = Text

-- | Log message builder. Use (<a>&lt;&gt;</a>) to append two LogStr in
--   O(1).
data LogStr :: *
class ToLogStr msg
toLogStr :: ToLogStr msg => msg -> LogStr

-- | Monad transformer that adds a new logging function.
--   
--   Since 0.2.2
newtype LoggingT m a
LoggingT :: ((Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> m a) -> LoggingT m a
runLoggingT :: LoggingT m a -> (Loc -> LogSource -> LogLevel -> LogStr -> IO ()) -> m a

-- | Run a block using a <tt>MonadLogger</tt> instance which prints to
--   stderr.
--   
--   Since 0.2.2
runStderrLoggingT :: MonadIO m => LoggingT m a -> m a

-- | Run a block using a <tt>MonadLogger</tt> instance which prints to
--   stdout.
--   
--   Since 0.2.2
runStdoutLoggingT :: MonadIO m => LoggingT m a -> m a

-- | Within the <a>LoggingT</a> monad, capture all log messages to a
--   bounded channel of the indicated size, and only actually log them if
--   there is an exception.
--   
--   Since 0.3.2
withChannelLogger :: (MonadBaseControl IO m, MonadIO m) => Int -> LoggingT m a -> LoggingT m a

-- | Only log messages passing the given predicate function.
--   
--   This can be a convenient way, for example, to ignore debug level
--   messages.
--   
--   Since 0.3.13
filterLogger :: (LogSource -> LogLevel -> Bool) -> LoggingT m a -> LoggingT m a

-- | Monad transformer that disables logging.
--   
--   Since 0.2.4
newtype NoLoggingT m a
NoLoggingT :: m a -> NoLoggingT m a
runNoLoggingT :: NoLoggingT m a -> m a

-- | Generates a function that takes a <a>Text</a> and logs a
--   <a>LevelDebug</a> message. Usage:
--   
--   <pre>
--   $(logDebug) "This is a debug log message"
--   </pre>
logDebug :: Q Exp

-- | See <a>logDebug</a>
logInfo :: Q Exp

-- | See <a>logDebug</a>
logWarn :: Q Exp

-- | See <a>logDebug</a>
logError :: Q Exp

-- | Generates a function that takes a <a>Text</a> and logs a
--   <a>LevelOther</a> message. Usage:
--   
--   <pre>
--   $(logOther "My new level") "This is a log message"
--   </pre>
logOther :: Text -> Q Exp

-- | Generates a function that takes a <a>LogSource</a> and <a>Text</a> and
--   logs a <a>LevelDebug</a> message. Usage:
--   
--   <pre>
--   $logDebugS "SomeSource" "This is a debug log message"
--   </pre>
logDebugS :: Q Exp

-- | See <a>logDebugS</a>
logInfoS :: Q Exp

-- | See <a>logDebugS</a>
logWarnS :: Q Exp

-- | See <a>logDebugS</a>
logErrorS :: Q Exp

-- | Generates a function that takes a <a>LogSource</a>, a level name and a
--   <a>Text</a> and logs a <a>LevelOther</a> message. Usage:
--   
--   <pre>
--   $logOtherS "SomeSource" "My new level" "This is a log message"
--   </pre>
logOtherS :: Q Exp

-- | Lift a location into an Exp.
--   
--   Since 0.3.1
liftLoc :: Loc -> Q Exp
logDebugN :: MonadLogger m => Text -> m ()
logInfoN :: MonadLogger m => Text -> m ()
logWarnN :: MonadLogger m => Text -> m ()
logErrorN :: MonadLogger m => Text -> m ()
logOtherN :: MonadLogger m => LogLevel -> Text -> m ()
logDebugNS :: MonadLogger m => Text -> Text -> m ()
logInfoNS :: MonadLogger m => Text -> Text -> m ()
logWarnNS :: MonadLogger m => Text -> Text -> m ()
logErrorNS :: MonadLogger m => Text -> Text -> m ()
logOtherNS :: MonadLogger m => Text -> LogLevel -> Text -> m ()
defaultLogStr :: Loc -> LogSource -> LogLevel -> LogStr -> LogStr
data Loc :: *
instance Eq LogLevel
instance Show LogLevel
instance Read LogLevel
instance Ord LogLevel
instance MonadWriter w m => MonadWriter w (NoLoggingT m)
instance MonadState s m => MonadState s (NoLoggingT m)
instance MonadWriter w m => MonadWriter w (LoggingT m)
instance MonadState s m => MonadState s (LoggingT m)
instance MonadReader r m => MonadReader r (LoggingT m)
instance MonadRWS r w s m => MonadRWS r w s (LoggingT m)
instance MonadError e m => MonadError e (NoLoggingT m)
instance MonadError e m => MonadError e (LoggingT m)
instance MonadCont m => MonadCont (LoggingT m)
instance MonadIO m => MonadLoggerIO (LoggingT m)
instance MonadIO m => MonadLogger (LoggingT m)
instance MonadBaseControl b m => MonadBaseControl b (LoggingT m)
instance MonadTransControl LoggingT
instance MonadTrans LoggingT
instance MonadBase b m => MonadBase b (LoggingT m)
instance MonadResource m => MonadResource (LoggingT m)
instance MonadMask m => MonadMask (LoggingT m)
instance MonadCatch m => MonadCatch (LoggingT m)
instance MonadThrow m => MonadThrow (LoggingT m)
instance MonadIO m => MonadIO (LoggingT m)
instance Monad m => Monad (LoggingT m)
instance Monad m => Applicative (LoggingT m)
instance Monad m => Functor (LoggingT m)
instance MonadIO m => MonadLoggerIO (NoLoggingT m)
instance Monad m => MonadLogger (NoLoggingT m)
instance MonadBaseControl b m => MonadBaseControl b (NoLoggingT m)
instance MonadTransControl NoLoggingT
instance MonadTrans NoLoggingT
instance MonadBase b m => MonadBase b (NoLoggingT m)
instance MonadResource m => MonadResource (NoLoggingT m)
instance MonadActive m => MonadActive (LoggingT m)
instance MonadActive m => MonadActive (NoLoggingT m)
instance MonadMask m => MonadMask (NoLoggingT m)
instance MonadCatch m => MonadCatch (NoLoggingT m)
instance MonadThrow m => MonadThrow (NoLoggingT m)
instance MonadIO m => MonadIO (NoLoggingT m)
instance Monad m => Monad (NoLoggingT m)
instance Monad m => Applicative (NoLoggingT m)
instance Monad m => Functor (NoLoggingT m)
instance (MonadLoggerIO m, Monoid w) => MonadLoggerIO (RWST r w s m)
instance (MonadLoggerIO m, Monoid w) => MonadLoggerIO (WriterT w m)
instance MonadLoggerIO m => MonadLoggerIO (StateT s m)
instance MonadLoggerIO m => MonadLoggerIO (ConduitM i o m)
instance MonadLoggerIO m => MonadLoggerIO (Pipe l i o u m)
instance MonadLoggerIO m => MonadLoggerIO (ResourceT m)
instance (MonadLoggerIO m, Monoid w) => MonadLoggerIO (RWST r w s m)
instance (MonadLoggerIO m, Monoid w) => MonadLoggerIO (WriterT w m)
instance MonadLoggerIO m => MonadLoggerIO (StateT s m)
instance MonadLoggerIO m => MonadLoggerIO (ContT r m)
instance MonadLoggerIO m => MonadLoggerIO (ReaderT r m)
instance MonadLoggerIO m => MonadLoggerIO (ExceptT e m)
instance (MonadLoggerIO m, Error e) => MonadLoggerIO (ErrorT e m)
instance MonadLoggerIO m => MonadLoggerIO (MaybeT m)
instance MonadLoggerIO m => MonadLoggerIO (ListT m)
instance MonadLoggerIO m => MonadLoggerIO (IdentityT m)
instance (MonadLogger m, Monoid w) => MonadLogger (RWST r w s m)
instance (MonadLogger m, Monoid w) => MonadLogger (WriterT w m)
instance MonadLogger m => MonadLogger (StateT s m)
instance MonadLogger m => MonadLogger (ConduitM i o m)
instance MonadLogger m => MonadLogger (Pipe l i o u m)
instance MonadLogger m => MonadLogger (ResourceT m)
instance (MonadLogger m, Monoid w) => MonadLogger (RWST r w s m)
instance (MonadLogger m, Monoid w) => MonadLogger (WriterT w m)
instance MonadLogger m => MonadLogger (StateT s m)
instance MonadLogger m => MonadLogger (ContT r m)
instance MonadLogger m => MonadLogger (ReaderT r m)
instance MonadLogger m => MonadLogger (ExceptT e m)
instance (MonadLogger m, Error e) => MonadLogger (ErrorT e m)
instance MonadLogger m => MonadLogger (MaybeT m)
instance MonadLogger m => MonadLogger (ListT m)
instance MonadLogger m => MonadLogger (IdentityT m)
instance Lift LogLevel
