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

Safe HaskellNone
LanguageHaskell2010

System.Wlog.PureLogging

Contents

Description

This module supports pure logging.

Synopsis

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 StateT 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 

Fields

Instances
MonadTrans PureLogger Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

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

Monad m => Monad (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

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 # 
Instance details

Defined in System.Wlog.PureLogging

Methods

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

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

Monad m => Applicative (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

pure :: a -> PureLogger m a #

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

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

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

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

MonadThrow m => MonadThrow (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

throwM :: Exception e => e -> PureLogger m a #

(Monad m, HasLoggerName m) => HasLoggerName (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Monad m => CanLog (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

MFunctor PureLogger Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

hoist :: Monad m => (forall a. m a -> n a) -> PureLogger m b -> PureLogger n b #

Monad m => MonadState (Seq LogEvent) (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

get :: PureLogger m (Seq LogEvent) #

put :: Seq LogEvent -> PureLogger m () #

state :: (Seq LogEvent -> (a, Seq LogEvent)) -> PureLogger m a #

data LogEvent Source #

Holds all required information for dispatchLoggerName function.

Constructors

LogEvent 
Instances
Show LogEvent Source # 
Instance details

Defined in System.Wlog.PureLogging

Monad m => MonadState (Seq LogEvent) (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Monad m => MonadState (Seq LogEvent) (PureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

get :: PureLogger m (Seq LogEvent) #

put :: Seq LogEvent -> PureLogger m () #

state :: (Seq LogEvent -> (a, Seq LogEvent)) -> PureLogger m a #

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

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

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

Logs all LogEvent's from given list. Just like dispatchEvents but uses proper logger Name.

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

Return log of pure logging action as list of LogEvent.

launchPureLog :: (CanLog n, Monad m) => (forall f. Functor f => m (f a) -> n (f b)) -> PureLogger m a -> n b Source #

Performs actual logging once given action completes.

newtype NamedPureLogger m a Source #

Instances
MonadTrans NamedPureLogger Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

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

Monad m => Monad (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Functor m => Functor (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

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

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

Monad m => Applicative (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

MonadThrow m => MonadThrow (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

throwM :: Exception e => e -> NamedPureLogger m a #

Monad m => HasLoggerName (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

Monad m => CanLog (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

MFunctor NamedPureLogger Source # 
Instance details

Defined in System.Wlog.PureLogging

Methods

hoist :: Monad m => (forall a. m a -> n a) -> NamedPureLogger m b -> NamedPureLogger n b #

Monad m => MonadState (Seq LogEvent) (NamedPureLogger m) Source # 
Instance details

Defined in System.Wlog.PureLogging

runNamedPureLog :: (Monad m, HasLoggerName m) => NamedPureLogger m a -> m (a, [LogEvent]) Source #

Return log of pure logging action as list of LogEvent, using logger name provided by context.

launchNamedPureLog :: (WithLogger n, Monad m) => (forall f. Functor f => m (f a) -> n (f b)) -> NamedPureLogger m a -> n b Source #

Similar to launchPureLog, but provides logger name from current context.

Running the NamedPureLogger gives us the pair of target and the list of LogEvents, wrapped in Monad from where using the fact that (,) is Functor logging can be triggered.

Example

Expand
  newtype PureSmth a = ...
      deriving (MonadSmth, ...)

  instance MonadSmth m => MonadSmt (NamedLoggerName m)

  evalPureSmth :: PureSmth a -> a

  makeField    :: MonadSmth m => Data -> m Field

  run :: (MonadIO m, WithLogger m) => m ()
  run = do
      data  <- getData
      -- field :: Field
      field <- launchNamedPureLog (pure . evalPureSmth) (makeField data)
      --       ^ logging happens here
      ...

launchNamedPureLogWith :: (WithLogger n, Monad m) => (forall f. Functor f => m (f a) -> f b) -> NamedPureLogger m a -> n b Source #

Similar to launchNamedPureLog, but calls pure on passed function result.

Example

Expand

The example from launchNamedPureLog with usage of this function will look like:

  newtype PureSmth a = ...
      deriving (MonadSmth, ...)

  instance MonadSmth m => MonadSmt (NamedLoggerName m)

  evalPureSmth :: PureSmth a -> a

  makeField    :: MonadSmth m => Data -> m Field

  run :: (MonadIO m, WithLogger m) => m ()
  run = do
      data  <- getData
      -- field :: Field
      field <- launchNamedPureLogWith evalPureSmth $ makeField data
      --       ^ logging happens here
      ...

usingNamedPureLogger :: Functor m => LoggerName -> NamedPureLogger m a -> m (a, [LogEvent]) Source #

Similar to runNamedPureLog, but using provided logger name.

logPureAction :: WithLogger m => NamedPureLogger m a -> m a Source #

Perform pure-logging computation, log its events and return the result of the computation