module System.Wlog.Terminal
( initTerminalLogging
) where
import Universum
import Data.Time (UTCTime)
import System.IO (Handle, stderr, stdout)
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)