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 -> String
setColor Color
color = [SGR] -> String
setSGRCode [ConsoleLayer -> ColorIntensity -> Color -> SGR
SetColor ConsoleLayer
Foreground ColorIntensity
Vivid Color
color]
priorityToColor :: Priority -> Color
priorityToColor :: Priority -> Color
priorityToColor Priority
CRITICAL = Color
Red
priorityToColor Priority
ALERT = Color
Red
priorityToColor Priority
EMERGENCY = Color
Red
priorityToColor Priority
ERROR = Color
Red
priorityToColor Priority
WARNING = Color
Yellow
priorityToColor Priority
NOTICE = Color
Magenta
priorityToColor Priority
INFO = Color
Blue
priorityToColor Priority
DEBUG = Color
Green
reset :: String
reset :: String
reset = [SGR] -> String
setSGRCode [SGR
Reset]
colorize :: Color -> String -> String
colorize :: Color -> String -> String
colorize Color
color String
txt = Color -> String
setColor Color
color String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
txt String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
reset
taffyLogFormatter :: LogFormatter a
taffyLogFormatter :: forall a. LogFormatter a
taffyLogFormatter a
_ (Priority
level, String
msg) String
name =
String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> IO String) -> String -> IO String
forall a b. (a -> b) -> a -> b
$ String -> String -> String -> String -> String
forall r. PrintfType r => String -> r
printf String
"%s %s - %s" String
colorizedPriority String
colorizedName String
msg
where priorityColor :: Color
priorityColor = Priority -> Color
priorityToColor Priority
level
colorizedPriority :: String
colorizedPriority = Color -> String -> String
colorize Color
priorityColor
(String
"[" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Priority -> String
forall a. Show a => a -> String
show Priority
level String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"]")
colorizedName :: String
colorizedName = Color -> String -> String
colorize Color
Green String
name
taffyLogHandler :: IO (GenericHandler Handle)
taffyLogHandler :: IO (GenericHandler Handle)
taffyLogHandler = GenericHandler Handle -> GenericHandler Handle
forall {a}. GenericHandler a -> GenericHandler a
setFormatter (GenericHandler Handle -> GenericHandler Handle)
-> IO (GenericHandler Handle) -> IO (GenericHandler Handle)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Handle -> Priority -> IO (GenericHandler Handle)
streamHandler Handle
stderr Priority
DEBUG
where setFormatter :: GenericHandler a -> GenericHandler a
setFormatter GenericHandler a
h = GenericHandler a
h { formatter :: LogFormatter (GenericHandler a)
formatter = LogFormatter (GenericHandler a)
forall a. LogFormatter a
taffyLogFormatter }