module HSBencher.Internal.Logging
(LogDest(..), log, logOn,
logT, hsbencher_tag, chatter) 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)
import Prelude hiding (log)
data LogDest = ResultsFile | LogFile | StdOut deriving Show
log :: String -> BenchM ()
log = logOn [LogFile,StdOut]
logOn :: [LogDest] -> String -> BenchM ()
logOn modes s = do
let bstr = B.pack s
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
logT :: String -> BenchM ()
logT str = log$hsbencher_tag++str
chatter :: String -> IO ()
chatter s = putStrLn $ hsbencher_tag ++ s
hsbencher_tag :: String
hsbencher_tag = " [hsbencher] "