extensible-effects-concurrent-0.6.2: Message passing concurrency as extensible-effect

Safe HaskellNone
LanguageHaskell2010

Control.Eff.Log.Handler

Contents

Description

A logging effect based on MonadLog.

Synopsis

Logging Effect

data Logs message a where Source #

Logging effect type, parameterized by a log message type.

Constructors

LogMsg :: message -> Logs message () 

logMsg :: Member (Logs m) r => m -> Eff r () Source #

Log a message.

interceptLogging :: forall r m a. Member (Logs m) r => (m -> Eff r ()) -> Eff r a -> Eff r a Source #

Change, add or remove log messages and perform arbitrary actions upon intercepting a log message.

Requirements:

  • All log meta data for typical prod code can be added without changing much of the code
  • Add timestamp to a log messages of a sub-computation.
  • Write some messages to a file.
  • Log something extra, e.g. runtime memory usage in load tests

Approach: Install a callback that sneaks into to log message sending/receiving, to intercept the messages and execute some code and then return a new message.

foldLogMessages :: forall r m a f. (Foldable f, Member (Logs m) r) => (m -> f m) -> Eff r a -> Eff r a Source #

Intercept logging to change, add or remove log messages.

This is without side effects, hence faster than interceptLogging.

relogAsString :: forall m e a. (Show m, Member (Logs String) e) => Eff (Logs m ': e) a -> Eff e a Source #

Handle a Logs effect with a message that has a Show instance by **re-logging** each message applied to show.

captureLogs :: NFData message => Eff (Logs message ': r) a -> Eff r (a, Seq message) Source #

Capture all log messages in a Seq (strict).

ignoreLogs :: forall message r a. Eff (Logs message ': r) a -> Eff r a Source #

Throw away all log messages.

handleLogsWith :: forall message e a. (message -> Eff e ()) -> Eff (Logs message ': e) a -> Eff e a Source #

Apply a function that returns an effect to each log message.

handleLogsLifted :: forall m r message a. (NFData message, Monad m, SetMember Lift (Lift m) r) => (message -> m ()) -> Eff (Logs message ': r) a -> Eff r a Source #

Handle the Logs effect with a monadic call back function (strict).

handleLogsWithLoggingTHandler :: forall m r message a. (Monad m, SetMember Lift (Lift m) r) => (forall b. (Handler m message -> m b) -> m b) -> Eff (Logs message ': r) a -> Eff r a Source #

Handle the Logs effect using LoggingT Handlers.