{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE RecordWildCards #-}
module Logging.Types.Handlers.StreamHandler ( StreamHandler(..) ) where
import Control.Monad (unless)
import GHC.Generics
import System.IO
import Logging.Types.Class
import Logging.Types.Filter
import Logging.Types.Formatter
import Logging.Types.Level
data StreamHandler = StreamHandler { stream :: Handle
, level :: Level
, filterer :: Filterer
, formatter :: Formatter
} deriving (Generic, Eq)
instance Handler StreamHandler where
emit hdl@StreamHandler{..} rcd = do
hPutStrLn stream $ format formatter rcd
flush hdl
flush = hFlush . stream