Safe Haskell | None |
---|---|
Language | Haskell2010 |
An RFC 5434 inspired log message and convenience functions for logging them.
Synopsis
- data LogMessage = MkLogMessage {
- _lmFacility :: !Facility
- _lmSeverity :: !Severity
- _lmTimestamp :: !(Maybe UTCTime)
- _lmHostname :: !(Maybe String)
- _lmAppName :: !(Maybe String)
- _lmProcessId :: !(Maybe String)
- _lmMessageId :: !(Maybe String)
- _lmStructuredData :: ![StructuredDataElement]
- _lmThreadId :: !(Maybe ThreadId)
- _lmSrcLoc :: !(Maybe SrcLoc)
- _lmMessage :: !String
- lmFacility :: Functor f => (Facility -> f Facility) -> LogMessage -> f LogMessage
- lmSeverity :: Functor f => (Severity -> f Severity) -> LogMessage -> f LogMessage
- lmTimestamp :: Functor f => (Maybe UTCTime -> f (Maybe UTCTime)) -> LogMessage -> f LogMessage
- lmHostname :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage
- lmAppName :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage
- lmProcessId :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage
- lmMessageId :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage
- lmStructuredData :: Functor f => ([StructuredDataElement] -> f [StructuredDataElement]) -> LogMessage -> f LogMessage
- lmSrcLoc :: Functor f => (Maybe SrcLoc -> f (Maybe SrcLoc)) -> LogMessage -> f LogMessage
- lmThreadId :: Functor f => (Maybe ThreadId -> f (Maybe ThreadId)) -> LogMessage -> f LogMessage
- lmMessage :: Functor f => (String -> f String) -> LogMessage -> f LogMessage
- setCallStack :: CallStack -> LogMessage -> LogMessage
- prefixLogMessagesWith :: String -> LogMessage -> LogMessage
- setLogMessageTimestamp :: LogMessage -> IO LogMessage
- setLogMessageThreadId :: LogMessage -> IO LogMessage
- setLogMessageHostname :: LogMessage -> IO LogMessage
- renderRFC5424 :: LogMessage -> String
- printLogMessage :: LogMessage -> IO ()
- renderLogMessage :: LogMessage -> String
- errorMessage :: HasCallStack => String -> LogMessage
- infoMessage :: HasCallStack => String -> LogMessage
- debugMessage :: HasCallStack => String -> LogMessage
- class ToLogMessage a where
- toLogMessage :: a -> LogMessage
- errorMessageIO :: (HasCallStack, MonadIO m) => String -> m LogMessage
- infoMessageIO :: (HasCallStack, MonadIO m) => String -> m LogMessage
- debugMessageIO :: (HasCallStack, MonadIO m) => String -> m LogMessage
- type LogPredicate = LogMessage -> Bool
- allLogMessages :: LogPredicate
- noLogMessages :: LogPredicate
- lmSeverityIs :: Severity -> LogPredicate
- lmSeverityIsAtLeast :: Severity -> LogPredicate
- lmMessageStartsWith :: String -> LogPredicate
- discriminateByAppName :: String -> LogPredicate -> LogPredicate -> LogPredicate
- data StructuredDataElement = SdElement {}
- data SdParameter = MkSdParameter !String !String
- sdName :: String -> String
- sdParamValue :: String -> String
- sdElementId :: Functor f => (String -> f String) -> StructuredDataElement -> f StructuredDataElement
- sdElementParameters :: Functor f => ([SdParameter] -> f [SdParameter]) -> StructuredDataElement -> f StructuredDataElement
- data Severity
- emergencySeverity :: Severity
- alertSeverity :: Severity
- criticalSeverity :: Severity
- errorSeverity :: Severity
- warningSeverity :: Severity
- noticeSeverity :: Severity
- informationalSeverity :: Severity
- debugSeverity :: Severity
- data Facility
- kernelMessages :: Facility
- userLevelMessages :: Facility
- mailSystem :: Facility
- systemDaemons :: Facility
- securityAuthorizationMessages4 :: Facility
- linePrinterSubsystem :: Facility
- networkNewsSubsystem :: Facility
- uucpSubsystem :: Facility
- clockDaemon :: Facility
- securityAuthorizationMessages10 :: Facility
- ftpDaemon :: Facility
- ntpSubsystem :: Facility
- logAuditFacility :: Facility
- logAlertFacility :: Facility
- clockDaemon2 :: Facility
- local0 :: Facility
- local1 :: Facility
- local2 :: Facility
- local3 :: Facility
- local4 :: Facility
- local5 :: Facility
- local6 :: Facility
- local7 :: Facility
Log Message Data Type
data LogMessage Source #
A message data type inspired by the RFC-5424 Syslog Protocol
MkLogMessage | |
|
Instances
Field Accessors
lmFacility :: Functor f => (Facility -> f Facility) -> LogMessage -> f LogMessage Source #
A lens for the Facility
of a LogMessage
lmSeverity :: Functor f => (Severity -> f Severity) -> LogMessage -> f LogMessage Source #
A lens for the Severity
of a LogMessage
lmTimestamp :: Functor f => (Maybe UTCTime -> f (Maybe UTCTime)) -> LogMessage -> f LogMessage Source #
A lens for the UTC time of a LogMessage
The function setLogMessageTimestamp
can be used to set the field.
lmHostname :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage Source #
A lens for the hostname of a LogMessage
The function setLogMessageHostname
can be used to set the field.
lmAppName :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage Source #
A lens for the RFC 5424 application name of a LogMessage
One useful pattern for using this field, is to implement log filters that allow info and debug message from the application itself while only allowing warning and error messages from third party libraries:
debugLogsForAppName myAppName lm = view lmAppName lm == Just myAppName || lmSeverityIsAtLeast warningSeverity lm
This concept is also implemented in discriminateByAppName
.
lmProcessId :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage Source #
A lens for a user defined of process id of a LogMessage
lmMessageId :: Functor f => (Maybe String -> f (Maybe String)) -> LogMessage -> f LogMessage Source #
A lens for a user defined message id of a LogMessage
lmStructuredData :: Functor f => ([StructuredDataElement] -> f [StructuredDataElement]) -> LogMessage -> f LogMessage Source #
A lens for the StructuredDataElement
of a LogMessage
lmSrcLoc :: Functor f => (Maybe SrcLoc -> f (Maybe SrcLoc)) -> LogMessage -> f LogMessage Source #
A lens for the SrcLoc
of a LogMessage
lmThreadId :: Functor f => (Maybe ThreadId -> f (Maybe ThreadId)) -> LogMessage -> f LogMessage Source #
A lens for the ThreadId
of a LogMessage
The function setLogMessageThreadId
can be used to set the field.
lmMessage :: Functor f => (String -> f String) -> LogMessage -> f LogMessage Source #
A lens for the user defined textual message of a LogMessage
IO Based LogMessage
Modification
setCallStack :: CallStack -> LogMessage -> LogMessage Source #
Put the source location of the given callstack in lmSrcLoc
prefixLogMessagesWith :: String -> LogMessage -> LogMessage Source #
Prefix the lmMessage
.
setLogMessageTimestamp :: LogMessage -> IO LogMessage Source #
An IO action that sets the current UTC time in lmTimestamp
.
setLogMessageThreadId :: LogMessage -> IO LogMessage Source #
An IO action appends the the ThreadId
of the calling process (see myThreadId
)
to lmMessage
.
setLogMessageHostname :: LogMessage -> IO LogMessage Source #
An IO action that sets the current hosts fully qualified hostname in lmHostname
.
Log Message Text Rendering
renderRFC5424 :: LogMessage -> String Source #
Render a LogMessage
according to the rules in the given RFC, except for
the rules concerning unicode and ascii
printLogMessage :: LogMessage -> IO () Source #
Render a LogMessage
but set the timestamp and thread id fields.
renderLogMessage :: LogMessage -> String Source #
Render a LogMessage
human readable.
Log Message Construction
errorMessage :: HasCallStack => String -> LogMessage Source #
Construct a LogMessage
with errorSeverity
infoMessage :: HasCallStack => String -> LogMessage Source #
Construct a LogMessage
with informationalSeverity
debugMessage :: HasCallStack => String -> LogMessage Source #
Construct a LogMessage
with debugSeverity
Type Class for Conversion to LogMessage
class ToLogMessage a where Source #
Things that can become a LogMessage
toLogMessage :: a -> LogMessage Source #
Convert the value to a LogMessage
Instances
ToLogMessage String Source # | |
Defined in Control.Eff.Log.Message toLogMessage :: String -> LogMessage Source # | |
ToLogMessage LogMessage Source # | |
Defined in Control.Eff.Log.Message toLogMessage :: LogMessage -> LogMessage Source # |
IO Based Constructor
errorMessageIO :: (HasCallStack, MonadIO m) => String -> m LogMessage Source #
Construct a LogMessage
with errorSeverity
infoMessageIO :: (HasCallStack, MonadIO m) => String -> m LogMessage Source #
Construct a LogMessage
with informationalSeverity
debugMessageIO :: (HasCallStack, MonadIO m) => String -> m LogMessage Source #
Construct a LogMessage
with debugSeverity
LogMessage
Predicates
Log Message Predicates
These are the predefined LogPredicate
s:
To find out how to use these predicates, goto Control.Eff.Log.Handler
type LogPredicate = LogMessage -> Bool Source #
The filter predicate for message that shall be logged.
allLogMessages :: LogPredicate Source #
All messages.
See Control.Eff.Log.Message for more predicates.
noLogMessages :: LogPredicate Source #
No messages.
See Control.Eff.Log.Message for more predicates.
lmSeverityIs :: Severity -> LogPredicate Source #
Match LogMessage
s that have exactly the given severity.
See lmSeverityIsAtLeast
.
See Control.Eff.Log.Message for more predicates.
lmSeverityIsAtLeast :: Severity -> LogPredicate Source #
Match LogMessage
s that have the given severity or worse.
See lmSeverityIs
.
See Control.Eff.Log.Message for more predicates.
lmMessageStartsWith :: String -> LogPredicate Source #
Match LogMessage
s whose lmMessage
starts with the given string.
See Control.Eff.Log.Message for more predicates.
discriminateByAppName :: String -> LogPredicate -> LogPredicate -> LogPredicate Source #
Apply a LogPredicate
based on the lmAppName
and delegate
to one of two LogPredicate
s.
One useful application for this is to allow info and debug message from one application, e.g. the current application itself, while at the same time allowing only warning and error messages from third party libraries.
See Control.Eff.Log.Message for more predicates.
RFC-5424 Structured Data
data StructuredDataElement Source #
RFC-5424 defines how structured data can be included in a log message.
Instances
data SdParameter Source #
Component of an RFC-5424 StructuredDataElement
Instances
sdName :: String -> String Source #
Extract the name of an SdParameter
the length is cropped to 32 according to RFC 5424.
sdParamValue :: String -> String Source #
Extract the value of an SdParameter
.
sdElementId :: Functor f => (String -> f String) -> StructuredDataElement -> f StructuredDataElement Source #
A lens for the key or ID of a group of RFC 5424 key-value pairs.
sdElementParameters :: Functor f => ([SdParameter] -> f [SdParameter]) -> StructuredDataElement -> f StructuredDataElement Source #
A lens for SdParameter
s
RFC 5424 Severity
An rfc 5424 severity
Instances
Eq Severity Source # | |
Ord Severity Source # | |
Defined in Control.Eff.Log.Message | |
Show Severity Source # | |
Generic Severity Source # | |
Default Severity Source # | |
Defined in Control.Eff.Log.Message | |
NFData Severity Source # | |
Defined in Control.Eff.Log.Message | |
type Rep Severity Source # | |
Defined in Control.Eff.Log.Message |
emergencySeverity :: Severity Source #
Smart constructor for the RFC-5424 emergency LogMessage
Severity
.
This corresponds to the severity value 0.
See lmSeverity
.
alertSeverity :: Severity Source #
Smart constructor for the RFC-5424 alert LogMessage
Severity
.
This corresponds to the severity value 1.
See lmSeverity
.
criticalSeverity :: Severity Source #
Smart constructor for the RFC-5424 critical LogMessage
Severity
.
This corresponds to the severity value 2.
See lmSeverity
.
errorSeverity :: Severity Source #
Smart constructor for the RFC-5424 error LogMessage
Severity
.
This corresponds to the severity value 3.
See lmSeverity
.
warningSeverity :: Severity Source #
Smart constructor for the RFC-5424 warning LogMessage
Severity
.
This corresponds to the severity value 4.
See lmSeverity
.
noticeSeverity :: Severity Source #
Smart constructor for the RFC-5424 notice LogMessage
Severity
.
This corresponds to the severity value 5.
See lmSeverity
.
informationalSeverity :: Severity Source #
Smart constructor for the RFC-5424 informational LogMessage
Severity
.
This corresponds to the severity value 6.
See lmSeverity
.
debugSeverity :: Severity Source #
Smart constructor for the RFC-5424 debug LogMessage
Severity
.
This corresponds to the severity value 7.
See lmSeverity
.
RFC 5424 Facility
An rfc 5424 facility
Instances
Eq Facility Source # | |
Ord Facility Source # | |
Defined in Control.Eff.Log.Message | |
Show Facility Source # | |
Generic Facility Source # | |
Default Facility Source # | |
Defined in Control.Eff.Log.Message | |
NFData Facility Source # | |
Defined in Control.Eff.Log.Message | |
type Rep Facility Source # | |
Defined in Control.Eff.Log.Message |
Facility Constructors
kernelMessages :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility kernelMessages
.
See lmFacility
.
userLevelMessages :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility userLevelMessages
.
See lmFacility
.
mailSystem :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility mailSystem
.
See lmFacility
.
systemDaemons :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility systemDaemons
.
See lmFacility
.
securityAuthorizationMessages4 :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility securityAuthorizationMessages4
.
See lmFacility
.
linePrinterSubsystem :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility linePrinterSubsystem
.
See lmFacility
.
networkNewsSubsystem :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility networkNewsSubsystem
.
See lmFacility
.
uucpSubsystem :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility uucpSubsystem
.
See lmFacility
.
clockDaemon :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility clockDaemon
.
See lmFacility
.
securityAuthorizationMessages10 :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility securityAuthorizationMessages10
.
See lmFacility
.
ftpDaemon :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility ftpDaemon
.
See lmFacility
.
ntpSubsystem :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility ntpSubsystem
.
See lmFacility
.
logAuditFacility :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility logAuditFacility
.
See lmFacility
.
logAlertFacility :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility logAlertFacility
.
See lmFacility
.
clockDaemon2 :: Facility Source #
Smart constructor for the RFC-5424 LogMessage
facility clockDaemon2
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local0
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local1
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local2
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local3
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local4
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local5
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local6
.
See lmFacility
.
Smart constructor for the RFC-5424 LogMessage
facility local7
.
See lmFacility
.