@@ -13,7 +13,7 @@ module Hakyll.Core.Logger
1313
1414import Control.Monad (forever)
1515import Control.Monad.Trans (MonadIO, liftIO)
16−import Control.Applicative ((<$>), (<*>))
16+import Control.Applicative (pure, (<$>), (<*>))
1717import Control.Concurrent (forkIO)
1818import Control.Concurrent.Chan.Strict (Chan, newChan, readChan, writeChan)
1919import Control.Concurrent.MVar.Strict (MVar, newEmptyMVar, takeMVar, putMVar)
@@ -24,15 +24,16 @@ import Data.Time (getCurrentTime, diffUTCTime)
2424-- | Logger structure. Very complicated.
2525--
2626data Logger = Logger
27− { loggerChan :: Chan (Maybe String) -- Nothing marks the end
28− , loggerSync :: MVar () -- Used for sync on quit
27+ { loggerChan :: Chan (Maybe String) -- ^ Nothing marks the end
28+ , loggerSync :: MVar () -- ^ Used for sync on quit
29+ , loggerSink :: String -> IO () -- ^ Out sink
2930 }
3031
3132-- | Create a new logger
3233--
33−makeLogger :: IO Logger
34−makeLogger = do
35− logger <- Logger <$> newChan <*> newEmptyMVar
34+makeLogger :: (String -> IO ()) -> IO Logger
35+makeLogger sink = do
36+ logger <- Logger <$> newChan <*> newEmptyMVar <*> pure sink
3637 _ <- forkIO $ loggerThread logger
3738 return logger
3839 where
@@ -42,7 +43,7 @@ makeLogger = do
4243 -- Stop: sync
4344 Nothing -> putMVar (loggerSync logger) ()
4445 -- Print and continue
45− Just m -> putStrLn m
46+ Just m -> loggerSink logger m
4647
4748-- | Flush the logger (blocks until flushed)
4849--