log4hs-0.4.0.0: src/Logging/Config/Yaml.hs
{-| This module provides a convenient way to decode a 'Manager' from yaml string
Here is a 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: /etc/my/json.log
encoding: utf8
rotate:
type: RotatingFileHandler
level: INFO
formatter: standard
file: /etc/my/json.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
catchUncaughtException: true
@
-}
module Logging.Config.Yaml (getManager, getManagerFile) where
import Control.Exception
import Data.ByteString
import Data.Yaml
import Logging.Config.Type
import Logging.Types (Manager)
-- | decode a 'Manager' from strict 'ByteString'
--
-- @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
--
-- @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