packages feed

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"