module Network.JobQueue.Logger
( logDebug
, logInfo
, logWarn
, logError
, logNotice
, logCritical
, Only
) where
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
import qualified Control.Monad.Logger as ML
import Language.Haskell.TH.Syntax (Q, Exp, qLocation)
import Data.Text.Format
import Control.Applicative
import Control.Monad.Reader
import Network.JobQueue.Types
import Network.JobQueue.Class
logTH :: ML.LogLevel -> Q Exp
logTH level =
[|\a b -> do
ju <- getJobUnit <$> ask
ML.monadLoggerLog $(qLocation >>= ML.liftLoc) (T.pack "") level $ T.concat
[ (LT.toStrict $ format (a :: Format) b)
, " ("
, T.pack $ desc ju
, ")"
]
|]
logDebug :: Q Exp
logDebug = logTH ML.LevelDebug
logInfo :: Q Exp
logInfo = logTH ML.LevelInfo
logWarn :: Q Exp
logWarn = logTH ML.LevelWarn
logError :: Q Exp
logError = logTH ML.LevelError
logNotice :: Q Exp
logNotice = logTH (ML.LevelOther "notice")
logCritical :: Q Exp
logCritical = logTH (ML.LevelOther "critical")