packages feed

eventlog-live-0.1.0.0: src-machines/GHC/Eventlog/Live/Internal/Logger.hs

{-# LANGUAGE OverloadedStrings #-}

module GHC.Eventlog.Live.Internal.Logger (
  LogSource,
  logMessage,
  logError,
  logWarning,
) where

import Data.Text (Text)
import Data.Text.IO qualified as TIO
import GHC.Eventlog.Live.Verbosity (Verbosity, showVerbosity, verbosityError, verbosityWarning)
import System.IO qualified as IO

{- |
Internal helper. Denotes the source of a log message.
-}
type LogSource = Text

{- |
Internal helper. Log messages to `IO.stderr`.
Only prints a message if its verbosity level is above the verbosity threshold.
-}
logMessage :: Verbosity -> Verbosity -> LogSource -> Text -> IO ()
logMessage verbosityLevel verbosityThreshold logSource msg
  | verbosityLevel >= verbosityThreshold =
      TIO.hPutStrLn IO.stderr . mconcat $ [logSource, ": ", showVerbosity verbosityLevel, ": ", msg]
  | otherwise = pure ()

{- |
Internal helper. Log errors to `IO.stderr`.
-}
logError :: Verbosity -> LogSource -> Text -> IO ()
logError = logMessage verbosityError

{- |
Internal helper. Log warnings to `IO.stderr`.
-}
logWarning :: Verbosity -> LogSource -> Text -> IO ()
logWarning = logMessage verbosityWarning