module Control.Distributed.Task.Util.Logging (logError, logWarn, logInfo, logDebug, logTrace, initLogging) where
import System.Directory (createDirectoryIfMissing)
import System.IO (stdout)
import qualified System.Log.Logger as L
import qualified System.Log.Handler as L (setFormatter)
import qualified System.Log.Handler.Simple as L
import qualified System.Log.Formatter as L
import Control.Distributed.Task.Util.FileUtil
logError, logWarn, logInfo, logDebug, logTrace :: String -> IO ()
logError = simpleLog L.errorM
logWarn = simpleLog L.warningM
logInfo = simpleLog L.infoM
logDebug _ = return ()
logTrace _ = return ()
simpleLog :: (String -> String -> IO ()) -> String -> IO ()
simpleLog levelLogger = levelLogger L.rootLoggerName
initLogging :: L.Priority -> L.Priority -> FilePath -> IO ()
initLogging stdoutLogLevel fileLogLevel logfile = do
L.updateGlobalLogger L.rootLoggerName (L.removeHandler)
L.updateGlobalLogger L.rootLoggerName (L.setLevel $ max' stdoutLogLevel fileLogLevel)
createDirectoryIfMissing True $ fst $ splitBasePath logfile
addHandler' $ L.fileHandler logfile fileLogLevel
addHandler' $ L.streamHandler stdout stdoutLogLevel
where
max' a b = if fromEnum a <= fromEnum b then a else b
addHandler' logHandlerM = do
logHandler <- logHandlerM
h <- return $ L.setFormatter logHandler (L.simpleLogFormatter "[$time : $loggername : $prio] $msg")
L.updateGlobalLogger L.rootLoggerName (L.addHandler h)