Safe Haskell | None |
---|---|
Language | Haskell2010 |
The LogWriter
type encapsulates an effectful function to write LogMessage
s.
Used in conjunction with the HandleLogWriter
class, it
can be used to write messages from within an effectful
computation.
Synopsis
- newtype LogWriter writerM = MkLogWriter {
- runLogWriter :: LogMessage -> writerM ()
- data LogWriterReader h v
- localLogWriterReader :: forall h e a. SetMember LogWriterReader (LogWriterReader h) e => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a
- askLogWriter :: SetMember LogWriterReader (LogWriterReader h) e => Eff e (LogWriter h)
- runLogWriterReader :: LogWriter h -> Eff (LogWriterReader h ': e) a -> Eff e a
- class HandleLogWriter (writerEff :: Type -> Type) where
- type LogWriterEffects writerEff :: [Type -> Type]
- handleLogWriterEffect :: LogWriterEffects writerEff <:: e => writerEff () -> Eff e ()
- liftWriteLogMessage :: (SetMember LogWriterReader (LogWriterReader writerEff) e, LogWriterEffects writerEff <:: e) => LogMessage -> Eff e ()
- noOpLogWriter :: Applicative m => LogWriter m
- debugTraceLogWriter :: Monad h => LogWriter h
- newtype PureLogWriter a = MkPureLogWriter {
- runPureLogWriter :: Identity a
- listLogWriter :: LogWriter CaptureLogs
- newtype CaptureLogs a = MkCaptureLogs {
- unCaptureLogs :: Eff '[CapturedLogsWriter] a
- type CapturedLogsWriter = Writer LogMessage
- runCapturedLogsWriter :: Eff (CapturedLogsWriter ': e) a -> Eff e (a, [LogMessage])
- consoleLogWriter :: LogWriter IO
- ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO
- filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e
- mappingLogWriter :: (LogMessage -> LogMessage) -> LogWriter e -> LogWriter e
- mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e
- ioLogWriter :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO
- defaultIoLogWriter :: String -> Facility -> LogWriter IO -> LogWriter IO
LogWriter
Definition
newtype LogWriter writerM Source #
A function that takes a log message and returns an effect that logs the message.
MkLogWriter | |
|
Instances
Applicative w => Default (LogWriter w) Source # | |
Defined in Control.Eff.Log.Writer | |
Handle (LogWriterReader h) e a (LogWriter h -> k) Source # | |
Defined in Control.Eff.Log.Writer handle :: (Eff e a -> LogWriter h -> k) -> Arrs e v a -> LogWriterReader h v -> LogWriter h -> k # handle_relay :: (e ~ (LogWriterReader h ': r'), Relay (LogWriter h -> k) r') => (a -> LogWriter h -> k) -> (Eff e a -> LogWriter h -> k) -> Eff e a -> LogWriter h -> k # respond_relay :: (a -> LogWriter h -> k) -> (Eff e a -> LogWriter h -> k) -> Eff e a -> LogWriter h -> k # |
LogWriter Reader Effect
data LogWriterReader h v Source #
A Reader specialized for LogWriter
s
The existing Reader
couldn't be used together with SetMember
, so this
lazy reader was written, specialized to reading LogWriter
.
Instances
localLogWriterReader :: forall h e a. SetMember LogWriterReader (LogWriterReader h) e => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a Source #
Modify the current LogWriter
.
askLogWriter :: SetMember LogWriterReader (LogWriterReader h) e => Eff e (LogWriter h) Source #
Get the current LogWriter
.
runLogWriterReader :: LogWriter h -> Eff (LogWriterReader h ': e) a -> Eff e a Source #
Provide the LogWriter
Exposed for custom extensions, if in doubt use withLogging
.
LogWriter Handler Class
class HandleLogWriter (writerEff :: Type -> Type) where Source #
The instances of this class are the monads that define (side-) effect(s) of writting logs.
type LogWriterEffects writerEff :: [Type -> Type] Source #
A list of effects that are required for writing the log messages. For example 'Lift IO' or '[]' for pure log writers.
handleLogWriterEffect :: LogWriterEffects writerEff <:: e => writerEff () -> Eff e () Source #
liftWriteLogMessage :: (SetMember LogWriterReader (LogWriterReader writerEff) e, LogWriterEffects writerEff <:: e) => LogMessage -> Eff e () Source #
Write a message using the LogWriter
found in the environment.
The semantics of this function are a combination of runLogWriter
and handleLogWriterEffect
,
with the LogWriter
read from a LogWriterReader
.
Instances
LogWriter
Handler Instance Zoo
Pure Writer
noOpLogWriter :: Applicative m => LogWriter m Source #
debugTraceLogWriter :: Monad h => LogWriter h Source #
A LogWriter
that applies renderLogMessage
to the log message and then
traces it using traceM
.
This LogWriter
work with any base monad.
newtype PureLogWriter a Source #
A phantom type for the HandleLogWriter
class for pure LogWriter
s
Instances
List Writer
newtype CaptureLogs a Source #
Instances
type CapturedLogsWriter = Writer LogMessage Source #
Alias for the Writer
that contains the captured LogMessage
s from CaptureLogs
.
runCapturedLogsWriter :: Eff (CapturedLogsWriter ': e) a -> Eff e (a, [LogMessage]) Source #
Run a Writer
for LogMessage
s.
Such a Writer
is needed for CaptureLogs
IO Writer
consoleLogWriter :: LogWriter IO Source #
Write LogMessage
s to standard output, formatted with printLogMessage
.
ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO Source #
A LogWriter
that renders LogMessage
s to strings via renderLogMessage
and prints them to an Handle
using hPutStrLn
.
Writer Combinator
Pure Writer Combinator
filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e Source #
A LogWriter
that applies a predicate to the LogMessage
and delegates to
to the given writer of the predicate is satisfied.
mappingLogWriter :: (LogMessage -> LogMessage) -> LogWriter e -> LogWriter e Source #
A LogWriter
that applies a function to the LogMessage
and delegates the result to
to the given writer.
Impure Writer Combinator
mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e Source #
Like mappingLogWriter
allow the function that changes the LogMessage
to have effects.
IO Based Combinator
ioLogWriter :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO Source #
A LogWriter
that uses an IO
action to write the message.
Example use cases for this function are the consoleLogWriter
and the ioHandleLogWriter
.
:: String | The default application name to put into the |
-> Facility | The default RFC-5424 facility to put into the |
-> LogWriter IO | The IO based writer to decorate |
-> LogWriter IO |
Decorate an IO based LogWriter
to fill out these fields in LogMessage
s:
- The messages will carry the given application name in the
lmAppName
field. - The
lmTimestamp
field contains the UTC time of the log event - The
lmThreadId
field contains the thread-Id - The
lmHostname
field contains the FQDN of the current host - The
lmFacility
field contains the givenFacility
It works by using mappingLogWriterM
.