batchd-0.1.1.0: src/Batchd/Daemon/Logging.hs
{-# LANGUAGE TemplateHaskell, TypeFamilies, OverloadedStrings #-}
-- | This module contains utilities for logging, used by batchd daemon.
module Batchd.Daemon.Logging
(
getLoggingSettings
) where
import qualified Data.Text.Format.Heavy as F
import Language.Haskell.TH.Lift
import System.Log.Heavy
import System.Log.Heavy.TH () -- import instances only
import Batchd.Common.Types
deriveLift ''DaemonMode
deriveLift ''DbDriver
deriveLift ''AuthMode
deriveLift ''LogTarget
deriveLift ''F.FormatItem
deriveLift ''F.Format
deriveLift ''LogConfig
deriveLift ''MetricsConfig
deriveLift ''WebClientConfig
deriveLift ''ManagerConfig
deriveLift ''DispatcherConfig
deriveLift ''StorageConfig
deriveLift ''TemplateSyntax
deriveLift ''GlobalConfig
-- | Get logging settings from global config.
getLoggingSettings :: GlobalConfig -> LoggingSettings
getLoggingSettings cfg =
case lcTarget $ dbcLogging cfg of
LogSyslog -> LoggingSettings $ filtering fltr $ defaultSyslogSettings {ssIdent = "batchd", ssFormat = logFormat}
LogStdout -> LoggingSettings $ filtering fltr $ defStdoutSettings {lsFormat = logFormat}
LogStderr -> LoggingSettings $ filtering fltr $ defStderrSettings {lsFormat = logFormat}
LogFile path -> LoggingSettings $ filtering fltr $ (defFileSettings path) {lsFormat = logFormat}
where
fltr :: LogFilter
fltr = map toFilter (lcFilter $ dbcLogging cfg) ++ [([], lcLevel $ dbcLogging cfg)]
logFormat = lcFormat (dbcLogging cfg)
toFilter :: (String, Level) -> (LogSource, Level)
toFilter (src, level) = (splitDots src, level)