module System.Wlog.Terminal
( initTerminalLogging
) where
import Universum
import Data.Time (UTCTime)
import System.Wlog.Formatter (stdoutFormatter)
import System.Wlog.IOLogger (rootLoggerName, setHandlers, setLevel, updateGlobalLogger)
import System.Wlog.LogHandler (LogHandler (setFormatter))
import System.Wlog.LogHandler.Simple (streamHandler)
import System.Wlog.Severity (Severities, debugPlus, errorPlus, excludeError)
initTerminalLogging :: MonadIO m
=> (UTCTime -> Text)
-> (Handle -> Text -> IO ())
-> Bool
-> Bool
-> Maybe Severities
-> Maybe Severities
-> m ()
initTerminalLogging
timeF
customConsoleAction
isShowTime
isShowTid
maybeSevOut
maybeSevErr
= liftIO $ do
lock <- liftIO $ newMVar ()
let (severitiesOut, severitiesErr) =
case (maybeSevOut, maybeSevErr) of
(Nothing, Nothing) -> (excludeError debugPlus, errorPlus)
(Just out, Nothing) -> (out, mempty)
(Nothing, Just err) -> (mempty, err)
(Just out, Just err) -> (out, err)
stdoutHandler <- setStdoutFormatter <$>
streamHandler stdout customConsoleAction lock severitiesOut
stderrHandler <- setStderrFormatter <$>
streamHandler stderr customConsoleAction lock severitiesErr
updateGlobalLogger rootLoggerName $
setHandlers [stderrHandler, stdoutHandler]
updateGlobalLogger rootLoggerName $
setLevel $ severitiesOut <> severitiesErr
where
setStdoutFormatter = (`setFormatter` stdoutFormatter timeF isShowTime isShowTid)
setStderrFormatter = (`setFormatter` stdoutFormatter timeF True isShowTid)