Safe Haskell | None |
---|---|
Language | Haskell2010 |
A logging effect based on MonadLog
.
Synopsis
- data Logs message a where
- logMsg :: Member (Logs m) r => m -> Eff r ()
- interceptLogging :: forall r m a. Member (Logs m) r => (m -> Eff r ()) -> Eff r a -> Eff r a
- foldLogMessages :: forall r m a f. (Foldable f, Member (Logs m) r) => (m -> f m) -> Eff r a -> Eff r a
- relogAsString :: forall m e a. (Show m, Member (Logs String) e) => Eff (Logs m ': e) a -> Eff e a
- captureLogs :: NFData message => Eff (Logs message ': r) a -> Eff r (a, Seq message)
- ignoreLogs :: forall message r a. Eff (Logs message ': r) a -> Eff r a
- handleLogsWith :: forall message e a. (message -> Eff e ()) -> Eff (Logs message ': e) a -> Eff e a
- 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
- 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
Logging Effect
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 #
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.