Copyright | (c) Adam Conner-Sax 2019 |
---|---|
License | BSD-3-Clause |
Maintainer | adam_conner_sax@yahoo.com |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Polysemy logger effect, using pretty-printing and severity based on logging-effect. Adds a Prefixing effect so that it's easy to wrap entire functions, etc. in logging prefixes and thus to distinguish where things are being logged from more easily. Also allows filtering by severity.
Synopsis
- data LogSeverity
- = Diagnostic
- | Info
- | Warning
- | Error
- data LogEntry = LogEntry {
- severity :: LogSeverity
- message :: Text
- data Logger a m r where
- data PrefixLog m r
- log :: Member (Logger a) effs => a -> Sem effs ()
- logLE :: Member (Logger LogEntry) effs => LogSeverity -> Text -> Sem effs ()
- wrapPrefix :: Member PrefixLog effs => Text -> Sem effs a -> Sem effs a
- filteredLogEntriesToIO :: MonadIO (Sem effs) => [LogSeverity] -> Sem (Logger LogEntry ': (PrefixLog ': effs)) x -> Sem effs x
- logAll :: [LogSeverity]
- nonDiagnostic :: [LogSeverity]
- type LogWithPrefixes a effs = (Member PrefixLog effs, Member (Logger a) effs)
- type LogWithPrefixesLE effs = LogWithPrefixes LogEntry effs
- data Sem (r :: [(Type -> Type) -> Type -> Type]) a
- type Member (e :: (Type -> Type) -> Type -> Type) (r :: [(Type -> Type) -> Type -> Type]) = Member' e r
- type Handler (m :: Type -> Type) message = message -> m ()
Logging Types
data LogSeverity Source #
Severity of message. Based on monad-logger.
Instances
A basic LogEntry with a severity and a (Text) message
LogEntry | |
|
Effects
Actions
log :: Member (Logger a) effs => a -> Sem effs () Source #
Add one log entry of arbitrary type. If you want to log with another type besides @LogEntry.
logLE :: Member (Logger LogEntry) effs => LogSeverity -> Text -> Sem effs () Source #
Add one log-entry of the LogEntry
type.
wrapPrefix :: Member PrefixLog effs => Text -> Sem effs a -> Sem effs a Source #
Add a prefix for the block of code.
Interpreters
filteredLogEntriesToIO :: MonadIO (Sem effs) => [LogSeverity] -> Sem (Logger LogEntry ': (PrefixLog ': effs)) x -> Sem effs x Source #
Run the Logger and PrefixLog effects using the preferred handler and filter output in any Polysemy monad with IO in the union.
Subsets for filtering
logAll :: [LogSeverity] Source #
LogSeverity list used in order to output everything.
nonDiagnostic :: [LogSeverity] Source #
LogSeverity
list used to output all but Diagnostic
.
Diagnostic
messages are sometimes useful for debugging but can get noisy depending on how you use it.
Constraints for convenience
type LogWithPrefixes a effs = (Member PrefixLog effs, Member (Logger a) effs) Source #
Constraint helper for logging with prefixes
type LogWithPrefixesLE effs = LogWithPrefixes LogEntry effs Source #
Constraint helper for LogEntry
type with prefixes
Re-Exports
data Sem (r :: [(Type -> Type) -> Type -> Type]) a #
Instances
Monad (Sem f) | |
Functor (Sem f) | |
Member Fixpoint r => MonadFix (Sem r) | |
Defined in Polysemy.Internal | |
Member NonDet r => MonadFail (Sem r) | |
Defined in Polysemy.Internal | |
Applicative (Sem f) | |
Member (Lift IO) r => MonadIO (Sem r) | |
Defined in Polysemy.Internal | |
Member NonDet r => Alternative (Sem r) | |
Member NonDet r => MonadPlus (Sem r) | |