-- |
-- Module: NetSpider.Spider.Internal.Log
-- Description: Logging functions related to Spider
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
-- __this module is internal. End-users should not use it.__
module NetSpider.Spider.Internal.Log
       ( runLogger,
         logLine,
         logDebug,
         logWarn
       ) where

import Control.Monad.Logger (LogLevel, LoggingT)
import qualified Control.Monad.Logger as Log
import Data.Functor.Identity (Identity, runIdentity)
import Data.Text (Text)

import NetSpider.Log (LogLine)
import NetSpider.Spider.Internal.Spider (Spider(..))
import NetSpider.Spider.Config (Config(..))

runLogger :: Spider n na fla -> LoggingT IO a -> IO a
runLogger :: Spider n na fla -> LoggingT IO a -> IO a
runLogger Spider n na fla
spider LoggingT IO a
act = LoggingT IO a -> IO a
forall (m :: * -> *) a. MonadIO m => LoggingT m a -> m a
Log.runStderrLoggingT (LoggingT IO a -> IO a) -> LoggingT IO a -> IO a
forall a b. (a -> b) -> a -> b
$ (LogSource -> LogLevel -> Bool) -> LoggingT IO a -> LoggingT IO a
forall (m :: * -> *) a.
(LogSource -> LogLevel -> Bool) -> LoggingT m a -> LoggingT m a
Log.filterLogger LogSource -> LogLevel -> Bool
forall p. p -> LogLevel -> Bool
fil LoggingT IO a
act
  where
    fil :: p -> LogLevel -> Bool
fil p
_ LogLevel
level = LogLevel
level LogLevel -> LogLevel -> Bool
forall a. Ord a => a -> a -> Bool
>= (Config n na fla -> LogLevel
forall n na fla. Config n na fla -> LogLevel
logThreshold (Config n na fla -> LogLevel) -> Config n na fla -> LogLevel
forall a b. (a -> b) -> a -> b
$ Spider n na fla -> Config n na fla
forall n na fla. Spider n na fla -> Config n na fla
spiderConfig Spider n na fla
spider)

logLine :: Spider n na fla -> LogLine -> IO ()
logLine :: Spider n na fla -> LogLine -> IO ()
logLine Spider n na fla
spider (Loc
loc, LogSource
src, LogLevel
level, LogStr
msg) = Spider n na fla -> LoggingT IO () -> IO ()
forall n na fla a. Spider n na fla -> LoggingT IO a -> IO a
runLogger Spider n na fla
spider (LoggingT IO () -> IO ()) -> LoggingT IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Loc -> LogSource -> LogLevel -> LogStr -> LoggingT IO ()
forall (m :: * -> *) msg.
(MonadLogger m, ToLogStr msg) =>
Loc -> LogSource -> LogLevel -> msg -> m ()
Log.monadLoggerLog Loc
loc LogSource
src LogLevel
level LogStr
msg

logDebug :: Spider n na fla -> Text -> IO ()
logDebug :: Spider n na fla -> LogSource -> IO ()
logDebug Spider n na fla
spider LogSource
msg = Spider n na fla -> LoggingT IO () -> IO ()
forall n na fla a. Spider n na fla -> LoggingT IO a -> IO a
runLogger Spider n na fla
spider (LoggingT IO () -> IO ()) -> LoggingT IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ LogSource -> LoggingT IO ()
forall (m :: * -> *). MonadLogger m => LogSource -> m ()
Log.logDebugN LogSource
msg

logWarn :: Spider n na fla -> Text -> IO ()
logWarn :: Spider n na fla -> LogSource -> IO ()
logWarn Spider n na fla
spider LogSource
msg = Spider n na fla -> LoggingT IO () -> IO ()
forall n na fla a. Spider n na fla -> LoggingT IO a -> IO a
runLogger Spider n na fla
spider (LoggingT IO () -> IO ()) -> LoggingT IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ LogSource -> LoggingT IO ()
forall (m :: * -> *). MonadLogger m => LogSource -> m ()
Log.logWarnN LogSource
msg