module System.Taffybar.LogFormatter where
import System.Console.ANSI
import System.Log.Formatter
import System.Log.Handler.Simple
import System.Log.Logger
import Text.Printf
import System.IO
import Data.Monoid
import Prelude
setColor :: Color -> String
setColor color = setSGRCode [SetColor Foreground Vivid color]
priorityToColor :: Priority -> Color
priorityToColor CRITICAL = Red
priorityToColor ALERT = Red
priorityToColor EMERGENCY = Red
priorityToColor ERROR = Red
priorityToColor WARNING = Yellow
priorityToColor NOTICE = Magenta
priorityToColor INFO = Blue
priorityToColor DEBUG = Green
reset :: String
reset = setSGRCode [Reset]
colorize :: Color -> String -> String
colorize color txt = setColor color <> txt <> reset
taffyLogFormatter :: LogFormatter a
taffyLogFormatter _ (level, msg) name =
return $ printf "%s %s - %s" colorizedPriority colorizedName msg
where priorityColor = priorityToColor level
colorizedPriority = colorize priorityColor
("[" <> show level <> "]")
colorizedName = colorize Green name
taffyLogHandler :: IO (GenericHandler Handle)
taffyLogHandler = setFormatter <$> streamHandler stderr DEBUG
where setFormatter h = h { formatter = taffyLogFormatter }