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 -- as hslogger logging does not seem to be that performant when there is nothing is to log, debugLogging is "configured" here to a hard off logDebug _ = return () --simpleLog L.debugM logTrace _ = return () --simpleLog L.debugM simpleLog :: (String -> String -> IO ()) -> String -> IO () simpleLog levelLogger = levelLogger L.rootLoggerName -- | Sets up hslogger. 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)