packages feed

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)