script-monad-0.0.4: src/Data/LogSeverity.hs
{- |
Module : Data.LogSeverity
Description : Syslog-style log message severities
Copyright : 2018, Automattic, Inc.
License : BSD3
Maintainer : Nathan Bloomfield (nbloomf@gmail.com)
Stability : experimental
Portability : POSIX
Syslog-style log message severities.
-}
{-# LANGUAGE OverloadedStrings #-}
module Data.LogSeverity (
LogSeverity(..)
, colorBySeverity
) where
import Data.Text
-- | [Syslog](https://en.wikipedia.org/wiki/Syslog) style log severities.
data LogSeverity
= LogDebug -- ^ Debug-level messages
| LogInfo -- ^ Informational messages
| LogNotice -- ^ Normal but significant condition
| LogWarning -- ^ Warning conditions
| LogError -- ^ Error conditions
| LogCritical -- ^ Critical conditions
| LogAlert -- ^ Action must be taken immediately
| LogEmergency -- ^ System is unusable
deriving (Eq, Ord, Show)
-- | Pretty prints a simple log header.
colorBySeverity
:: LogSeverity
-> Text -- ^ Printed before the severity label; i.e. a timestamp
-> Text
colorBySeverity severity msg = case severity of
LogDebug -> "\x1b[1;32m" <> msg <> " DEBUG \x1b[0;39;49m"
LogInfo -> "\x1b[1;32m" <> msg <> " INFO \x1b[0;39;49m"
LogNotice -> "\x1b[1;34m" <> msg <> " NOTICE \x1b[0;39;49m"
LogWarning -> "\x1b[1;33m" <> msg <> " WARNING \x1b[0;39;49m"
LogError -> "\x1b[1;31m" <> msg <> " ERROR \x1b[0;39;49m"
LogCritical -> "\x1b[1;31m" <> msg <> " CRITICAL \x1b[0;39;49m"
LogAlert -> "\x1b[1;35m" <> msg <> " ALERT \x1b[0;39;49m"
LogEmergency -> "\x1b[1;35m" <> msg <> " EMERGENCY \x1b[0;39;49m"