himpy-0.5.0: System/Himpy/Logger.hs
module System.Himpy.Logger (log_start, log_info) where
import System.IO (openFile, hPutStrLn, hFlush, hClose,
IOMode (AppendMode), Handle)
import Control.Concurrent (forkIO)
import Control.Monad (void, forever)
import Control.Monad.STM (atomically)
import Control.Concurrent.STM.TChan (writeTChan, readTChan, newTChanIO, TChan)
-- Simplistic logging module
log_line :: TChan String -> String -> IO ()
log_line chan path = do
line <- atomically $ readTChan chan
fd <- openFile path AppendMode
hPutStrLn fd line
hFlush fd
hClose fd
log_start :: String -> IO (TChan String)
log_start path = do
chan <- newTChanIO
void $ forkIO $ forever $ log_line chan path
return (chan)
log_info :: TChan String -> String -> IO ()
log_info chan msg = do
let info_msg = "[info] " ++ msg
atomically $ writeTChan chan info_msg