module Log
( LogState
, writeLog
, stdOutLog
, fileLog
, noLog
) where
import Control.Concurrent.MVar
import Data.Time.Clock
import Data.Time.Format()
data LogState
= NoLog
| FileLog (MVar FilePath)
| StdOutLog
----------------------------------
noLog = NoLog
stdOutLog = StdOutLog
fileLog f = do
writeFile f ""
fmap FileLog $ newMVar f
writeLog :: LogState -> [String] -> IO ()
writeLog _ []
= return ()
writeLog NoLog _
= return ()
writeLog (FileLog m) s
= modifyMVar_ m $ \fn -> do
time <- getCurrentTime
appendFile fn $ unlines s
-- appendFile fn $ unlines $ ("----- " ++ show time ++ " -----"): s
return fn
writeLog StdOutLog s = do
time <- getCurrentTime
putStrLn $ unlines s
-- appendFile fn $ unlines $ ("----- " ++ show time ++ " -----"): s