log4hs-0.7.0.0: src/Logging/Handler/FileHandler.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE RecordWildCards #-}
module Logging.Handler.FileHandler
( FileHandler(..)
) where
import Data.IORef
import GHC.Generics
import System.IO
import Text.Format
import Logging.Class
import Logging.Filter
import Logging.Level
import Logging.Prelude
-- | A handler type which writes logging records, appropriately formatted,
-- to a file.
data FileHandler = FileHandler { level :: Level
, filterer :: Filterer
, formatter :: Format1
, file :: FilePath
, encoding :: TextEncoding
, stream :: IORef Handle
-- ^ Don't open file manually, initialized as
-- __'IORef' undefined__ and use 'open' or
-- "Logger.Manager.initialize"
} deriving (Generic, Eq)
instance Handler FileHandler where
open FileHandler{..} = atomicWriteIORef stream =<< openLogFile file encoding
emit self@FileHandler{..} rcd = do
stream' <- readIORef stream
flip hPutStrLn (format1 formatter rcd) stream'
hFlush stream'
close FileHandler{..} = hClose =<< readIORef stream