module Network.IRC.Fun.Bot.Internal.Logger
( newLogger
, newLogger'
, removeLogger
, logLine
)
where
import Control.Monad (liftM)
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.RWS (asks)
import Data.Monoid ((<>))
import Network.IRC.Fun.Bot.Internal.Types
import System.Log.FastLogger
newLogger :: IO String
-> FilePath
-> IO Logger
newLogger getTime path = do
lset <- newFileLoggerSet defaultBufSize path
return $ Logger
{ loggerSet = lset
, loggerGetTime = getTime
}
newLogger' :: FilePath -> Session e s Logger
newLogger' path = do
timeGetter <- asks beGetTime
liftIO $ newLogger (liftM snd timeGetter) path
removeLogger :: Logger -> IO ()
removeLogger logger = rmLoggerSet $ loggerSet logger
formatLine :: ToLogStr s => IO String -> s -> IO LogStr
formatLine getTime line = do
t <- getTime
return $ toLogStr t <> toLogStr " " <> toLogStr line
logLine :: ToLogStr s => Logger -> s -> IO ()
logLine logger str = do
line <- formatLine (loggerGetTime logger) str
pushLogStrLn (loggerSet logger) line