module Inf.Log
( debug
, info
, warn
, error
) where
import Control.Monad (when)
import qualified Data.Time as Time
import qualified System.IO.Unsafe as Unsafe
import qualified System.Posix.IO as Unix
import qualified System.Posix.Terminal as Unix
import Prelude hiding (error)
isTTY :: Bool
isTTY = Unsafe.unsafePerformIO (Unix.queryTerminal (Unix.stdOutput))
timeFmt :: String
timeFmt = "[%Y-%m-%dT%H:%M:%S]"
timestamp :: IO String
timestamp = do
now <- Time.getCurrentTime
pure (Time.formatTime Time.defaultTimeLocale timeFmt now)
logMsg :: String -> [String] -> IO ()
logMsg color msg = do
now <- timestamp
when isTTY $ putStr color
putStr (unwords (now:msg))
when isTTY $ putStr "\x1b[39m"
putStrLn ""
debug :: [String] -> IO ()
debug = logMsg "\x1b[97m"
info :: [String] -> IO ()
info = logMsg "\x1b[94m"
warn :: [String] -> IO ()
warn = logMsg "\x1b[93m"
error :: [String] -> IO ()
error = logMsg "\x1b[91m"