{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-} 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")