hsbencher-1.0: HSBencher/Logging.hs
{-# LANGUAGE NamedFieldPuns #-}
module HSBencher.Logging where
import qualified Data.ByteString.Char8 as B
import Control.Monad.Reader (ask, liftIO)
import qualified System.IO.Streams as Strm
import HSBencher.Types (Config(..), BenchM)
--------------------------------------------------------------------------------
-- | There are three logging destinations we care about. The .dat
-- file, the .log file, and the user's screen (i.e. the user who
-- launched the benchmarks).
data LogDest = ResultsFile | LogFile | StdOut deriving Show
-- | Print a message (line) both to stdout and logFile:
log :: String -> BenchM ()
log = logOn [LogFile,StdOut] -- The commonly used default.
-- | Log a line to a particular file and also echo to stdout.
logOn :: [LogDest] -> String -> BenchM ()
logOn modes s = do
let bstr = B.pack s -- FIXME
Config{logOut, resultsOut, stdOut} <- ask
let go ResultsFile = Strm.write (Just bstr) resultsOut
go LogFile = Strm.write (Just bstr) logOut
go StdOut = Strm.write (Just bstr) stdOut
liftIO$ mapM_ go modes