log-warper-0.4: Flexible, configurable, monadic and pretty logging

Safe HaskellNone
LanguageHaskell2010

System.Wlog.CanLog

Contents

Description

Type class that add ability to log messages. Supports pure and IO logging.

Synopsis

Documentation

class Monad m => CanLog m where Source #

Instances of this class should explain how they add messages to their log.

Methods

dispatchMessage :: LoggerName -> Severity -> Text -> m () Source #

dispatchMessage :: (MonadTrans t, t n ~ m, CanLog n) => LoggerName -> Severity -> Text -> t n () Source #

Instances

type WithLogger m = (CanLog m, HasLoggerName m) Source #

Type alias for constraints CanLog and HasLoggerName. We need two different type classes to support more flexible interface but in practice we usually use them both.

Pure logging manipulation

newtype PureLogger m a Source #

Pure implementation of CanLog type class. Instead of writing log messages into console it appends log messages into WriterT log. It uses DList for better performance, because messages can be added only at the end of log. But it uses unsafePerformIO so use with caution within IO.

TODO: Should we use some Data.Tree-like structure to observe message only by chosen logger names?

Constructors

PureLogger 

Instances

MonadTrans PureLogger Source # 

Methods

lift :: Monad m => m a -> PureLogger m a #

MonadState s m => MonadState s (PureLogger m) Source # 

Methods

get :: PureLogger m s #

put :: s -> PureLogger m () #

state :: (s -> (a, s)) -> PureLogger m a #

MonadReader r m => MonadReader r (PureLogger m) Source # 

Methods

ask :: PureLogger m r #

local :: (r -> r) -> PureLogger m a -> PureLogger m a #

reader :: (r -> a) -> PureLogger m a #

MonadError e m => MonadError e (PureLogger m) Source # 

Methods

throwError :: e -> PureLogger m a #

catchError :: PureLogger m a -> (e -> PureLogger m a) -> PureLogger m a #

MonadBase b m => MonadBase b (PureLogger m) Source # 

Methods

liftBase :: b α -> PureLogger m α #

Monad m => Monad (PureLogger m) Source # 

Methods

(>>=) :: PureLogger m a -> (a -> PureLogger m b) -> PureLogger m b #

(>>) :: PureLogger m a -> PureLogger m b -> PureLogger m b #

return :: a -> PureLogger m a #

fail :: String -> PureLogger m a #

Functor m => Functor (PureLogger m) Source # 

Methods

fmap :: (a -> b) -> PureLogger m a -> PureLogger m b #

(<$) :: a -> PureLogger m b -> PureLogger m a #

Applicative m => Applicative (PureLogger m) Source # 

Methods

pure :: a -> PureLogger m a #

(<*>) :: PureLogger m (a -> b) -> PureLogger m a -> PureLogger m b #

(*>) :: PureLogger m a -> PureLogger m b -> PureLogger m b #

(<*) :: PureLogger m a -> PureLogger m b -> PureLogger m a #

(HasLoggerName m, Monad m) => HasLoggerName (PureLogger m) Source # 
Monad m => CanLog (PureLogger m) Source # 
Monad m => MonadWriter (DList LogEvent) (PureLogger m) Source # 

dispatchEvents :: WithLogger m => [LogEvent] -> m () Source #

Logs all LogEvent's from given list. This function supposed to be used after runPureLog.

runPureLog :: Monad m => PureLogger m a -> m (a, [LogEvent]) Source #

Return log of pure logging action as list of LogEvent.

Logging functions

logDebug :: WithLogger m => Text -> m () Source #

Shortcut for logMessage to use according severity.

logError :: WithLogger m => Text -> m () Source #

Shortcut for logMessage to use according severity.

logInfo :: WithLogger m => Text -> m () Source #

Shortcut for logMessage to use according severity.

logNotice :: WithLogger m => Text -> m () Source #

Shortcut for logMessage to use according severity.

logWarning :: WithLogger m => Text -> m () Source #

Shortcut for logMessage to use according severity.

logMessage :: WithLogger m => Severity -> Text -> m () Source #

Logs message with specified severity using logger name in context.