log-base-0.9.1.0: src/Log/Backend/LogList.hs
-- | LogList logging backed.
module Log.Backend.LogList
( LogList
, newLogList
, getLogList
, putLogList
, clearLogList
, withLogListLogger
) where
import Control.Concurrent.MVar
import System.IO
import Prelude
import Log.Data
import Log.Internal.Logger
newtype LogList = LogList (MVar [LogMessage])
deriving Eq
-- | Create a new, empty list.
newLogList :: IO LogList
newLogList = LogList <$> newMVar []
-- | Retrieve messages stored in the list.
getLogList :: LogList -> IO [LogMessage]
getLogList (LogList ll) = reverse <$> readMVar ll
-- | Put a message into the list.
putLogList :: LogList -> LogMessage -> IO ()
putLogList (LogList ll) msg = modifyMVar_ ll $ \msgs -> return $! msg : msgs
-- | Clear the list.
clearLogList :: LogList -> IO ()
clearLogList (LogList ll) = modifyMVar_ ll . const $ return []
-- | Creates a logger that stores messages in the given 'LogList'.
withLogListLogger :: LogList -> (Logger -> IO r) -> IO r
withLogListLogger ll = withLogger $ Logger
{ loggerWriteMessage = putLogList ll
, loggerWaitForWrite = return ()
, loggerShutdown = return ()
}