Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
This module exports tools for typing, parsing, and rendering logs in the df1 hierarchical structured logging format.
Consider this a preview release: The API is likely to stay stable, but extensive testing, formalization and tooling is due.
Synopsis
- data Log = Log {
- log_time :: !SystemTime
- log_level :: !Level
- log_path :: !(Seq Path)
- log_message :: !Message
- data Level
- data Path
- data Segment
- unSegment :: Segment -> Text
- segment :: Text -> Segment
- data Key
- unKey :: Key -> Text
- key :: Text -> Key
- data Value
- unValue :: Value -> Text
- value :: Text -> Value
- data Message
- unMessage :: Message -> Text
- message :: Text -> Message
- parse :: Parser Log
- render :: Log -> Builder
- renderColor :: Log -> Builder
Types
Log | |
|
Importance of the logged message.
These levels, listed in increasing order of importance, correspond to the levels used by syslog(3).
Debug | Message intended to be useful only when deliberately debugging a program. |
Info | Informational message. |
Notice | A condition that is not an error, but should possibly be handled specially. |
Warning | A warning condition, such as an exception being gracefully handled or some missing configuration setting being assigned a default value. |
Error | Error condition, such as an unhandled exception. |
Critical | Critical condition that could result in system failure, such as a disk running out of space. |
Alert | A condition that should be corrected immediately, such as a corrupted database. |
Emergency | System is unusable. |
Path
represents the hierarchical structure of logged messages.
For example, consider a df1 log line as like the following:
1999-12-20T07:11:39.230553031Z /foo x=a y=b /qux z=c z=d WARNING Something
For that line, the log_path
attribute of the Log
datatype will contain
the following:
[Push
(segment
"foo") ,Attr
(key
"x") (value
"a") ,Attr
(key
"y") (value
"b") ,Push
(segment
"qux") ,Attr
(key
"z") (value
"c") ,Attr
(key
"z") (value
"d") ] ::Seq
Path
Please notice that [] ::
is a valid path insofar as df1
is concerned, and that Seq
Path
Attr
and Push
can be juxtapositioned in any order.
A path segment.
If you have the OverloadedStrings
GHC extension enabled, you can build a
Segment
using a string literal:
"foo" :: Segment
Otherwise, you can use fromString
or the Segment
constructor directly.
An attribute key (see Attr
).
If you have the OverloadedStrings
GHC extension enabled, you can build a
Key
using a string literal:
"foo" :: Key
Otherwise, you can use fromString
or the key
function.
Please keep in mind that Key
will always strip surrounding whitespace.
That is:
"x" :: Key
== " x" == "x " == " x "
An attribute value (see Attr
).
If you have the OverloadedStrings
GHC extension enabled, you can build a
Value
using a string literal:
"foo" :: Value
Otherwise, you can use fromString
or the value
function.
Please keep in mind that value
will always strip surrounding whitespace.
That is:
"x" :: Value
== " x" == "x " == " x "
A message text.
If you have the OverloadedStrings
GHC extension enabled, you can build a
Message
using a string literal:
"foo" :: Message
Please keep in mind that Message
will always strip surrounding whitespace.
That is:
"x" :: Message
== " x" == "x " == " x "
Parsing
If sucessful, parsing will stop after the first CR or LF newline marker if any, otherwise it will consume all input.
Rendering
renderColor :: Log -> Builder Source #