log-warper-1.8.2: src/System/Wlog/Color.hs
-- |
-- Module : System.Wlog.Color
-- Copyright : (c) Serokell, 2016
-- License : GPL-3 (see the file LICENSE)
-- Maintainer : Serokell <hi@serokell.io>
-- Stability : experimental
-- Portability : POSIX, GHC
--
-- Colorizing utilities for log messages.
-- Messages are colored depending on used serverity.
module System.Wlog.Color
( colorizer
, colorizerBuilder
) where
import Universum
import Data.Text.Lazy.Builder as B
import System.Console.ANSI (Color (Blue, Green, Magenta, Red, Yellow), ColorIntensity (Vivid),
ConsoleLayer (Foreground), SGR (Reset, SetColor), setSGRCode)
import System.Wlog.Severity (Severity (..))
-- | Defines pre- and post-printed characters for printing colorized text.
table :: Severity -> (String, String)
table severity = case severity of
Error -> (setColor Red , reset)
Debug -> (setColor Green , reset)
Notice -> (setColor Magenta , reset)
Warning -> (setColor Yellow , reset)
Info -> (setColor Blue , reset)
where
setColor color = setSGRCode [SetColor Foreground Vivid color]
reset = setSGRCode [Reset]
-- | Colorizes "Text".
colorizer :: Severity -> Text -> Text
colorizer pr s =
let (before, after) = table pr in toText before <> s <> toText after
colorizerBuilder :: Severity -> Builder -> Builder
colorizerBuilder pr s =
let (before, after) = table pr in B.fromText (toText before) <> s <> B.fromText (toText after)