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


-- | Simple logging abstraction that allows multiple back-ends
--   
--   Simple logging abstraction that allows multiple back-ends
@package logging-facade
@version 0.3.1

module System.Logging.Facade.Types
data LogLevel
TRACE :: LogLevel
DEBUG :: LogLevel
INFO :: LogLevel
WARN :: LogLevel
ERROR :: LogLevel
data Location
Location :: String -> String -> String -> Int -> Int -> Location
[locationPackage] :: Location -> String
[locationModule] :: Location -> String
[locationFile] :: Location -> String
[locationLine] :: Location -> Int
[locationColumn] :: Location -> Int
data LogRecord
LogRecord :: LogLevel -> Maybe Location -> String -> LogRecord
[logRecordLevel] :: LogRecord -> LogLevel
[logRecordLocation] :: LogRecord -> Maybe Location
[logRecordMessage] :: LogRecord -> String
instance GHC.Enum.Enum System.Logging.Facade.Types.LogLevel
instance GHC.Enum.Bounded System.Logging.Facade.Types.LogLevel
instance GHC.Classes.Ord System.Logging.Facade.Types.LogLevel
instance GHC.Read.Read System.Logging.Facade.Types.LogLevel
instance GHC.Show.Show System.Logging.Facade.Types.LogLevel
instance GHC.Classes.Eq System.Logging.Facade.Types.LogLevel
instance GHC.Show.Show System.Logging.Facade.Types.Location
instance GHC.Classes.Eq System.Logging.Facade.Types.Location
instance GHC.Show.Show System.Logging.Facade.Types.LogRecord
instance GHC.Classes.Eq System.Logging.Facade.Types.LogRecord

module System.Logging.Facade.Sink

-- | A consumer for log records
type LogSink = LogRecord -> IO ()

-- | A thread-safe log sink that writes log messages to <a>stderr</a>
defaultLogSink :: IO LogSink

-- | Return the global log sink.
getLogSink :: IO LogSink

-- | Set the global log sink.
setLogSink :: LogSink -> IO ()

-- | Return the global log sink and set it to a new value in one atomic
--   operation.
swapLogSink :: LogSink -> IO LogSink

-- | Set the global log sink to a specified value, run given action, and
--   finally restore the global log sink to its previous value.
withLogSink :: LogSink -> IO () -> IO ()

module System.Logging.Facade.Class

-- | A type class for monads with logging support
class Monad m => Logging m
consumeLogRecord :: Logging m => LogRecord -> m ()
instance System.Logging.Facade.Class.Logging GHC.Types.IO
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Cont.ContT r m)
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Identity.IdentityT m)
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Maybe.MaybeT m)
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Reader.ReaderT r m)
instance (GHC.Base.Monoid w, System.Logging.Facade.Class.Logging m) => System.Logging.Facade.Class.Logging (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
instance (GHC.Base.Monoid w, System.Logging.Facade.Class.Logging m) => System.Logging.Facade.Class.Logging (Control.Monad.Trans.RWS.Strict.RWST r w s m)
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.State.Lazy.StateT s m)
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.State.Strict.StateT s m)
instance (GHC.Base.Monoid w, System.Logging.Facade.Class.Logging m) => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Base.Monoid w, System.Logging.Facade.Class.Logging m) => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance System.Logging.Facade.Class.Logging m => System.Logging.Facade.Class.Logging (Control.Monad.Trans.Except.ExceptT e m)


-- | This module is intended to be imported qualified:
--   
--   <pre>
--   import qualified System.Logging.Facade as Log
--   </pre>
module System.Logging.Facade

-- | Produce a log message with specified log level.
log :: (HasCallStack, Logging m) => LogLevel -> String -> m ()

-- | Produce a log message with log level <a>TRACE</a>.
trace :: (HasCallStack, Logging m) => String -> m ()

-- | Produce a log message with log level <a>DEBUG</a>.
debug :: (HasCallStack, Logging m) => String -> m ()

-- | Produce a log message with log level <a>INFO</a>.
info :: (HasCallStack, Logging m) => String -> m ()

-- | Produce a log message with log level <a>WARN</a>.
warn :: (HasCallStack, Logging m) => String -> m ()

-- | Produce a log message with log level <a>ERROR</a>.
error :: (HasCallStack, Logging m) => String -> m ()

-- | A type class for monads with logging support
class Monad m => Logging m
data LogLevel
TRACE :: LogLevel
DEBUG :: LogLevel
INFO :: LogLevel
WARN :: LogLevel
ERROR :: LogLevel
