log4hs-0.9.0.0: src/Logging/Config/Yaml.hs
{-|This module provides a convenient way to decode a 'Manager' from yaml string
=== Template
@
sinks:
root:
handlers:
- console
- file
App.Json:
handlers:
- file
propagate: false
App.Yaml:
handlers:
- rotate
propagate: false
handlers:
console:
type: StreamHandler
level: DEBUG
formatter: simple
stream: stderr
file:
type: FileHandler
level: "Level 100"
formatter: standard
file: \/var\/log\/my\/yaml.log
encoding: utf8
rotate:
type: RotatingFileHandler
level: INFO
formatter: standard
file: \/var\/log\/my\/yaml.log
encoding: utf8
maxBytes: 1048576
backupCount: 10
formatters:
simple: "{message}"
standard: "{asctime:%Y-%m-%dT%H:%M:%S%6Q%z} - {level} - {logger}] {message}"
disabled: false
@
-}
module Logging.Config.Yaml (getManager, getManagerFile) where
import Control.Exception
import Data.ByteString
import Data.Yaml
import Logging.Config.Type
import Logging.Manager
{-| decode a 'Manager' from strict 'ByteString', it
1) decodes 'Config' from json string, 2) constructs an 'Manager'
@since 0.4.0
-}
getManager :: ByteString -> IO Manager
getManager bs =
case decodeEither' bs of
Left e -> throw $ ConfigException $ prettyPrintParseException e
Right config -> createManager config
{- | decode a 'Manager' from a file, it
1) reads json string from file, 2) calls 'getManager' to construct an 'Manager'
@since 0.4.0
-}
getManagerFile :: FilePath -> IO Manager
getManagerFile path = do
res <- decodeFileEither path
case res of
Left e -> throw $ ConfigException $ prettyPrintParseException e
Right config -> createManager config