3 changed files with 127 additions and 3 deletions
@ -0,0 +1,117 @@
@@ -0,0 +1,117 @@
|
||||
{-# LANGUAGE FlexibleContexts #-} |
||||
{-# LANGUAGE LambdaCase #-} |
||||
{-# LANGUAGE OverloadedStrings #-} |
||||
{-# LANGUAGE RecordWildCards #-} |
||||
|
||||
module ATrade.Logging |
||||
( |
||||
Severity(..), |
||||
Message(..), |
||||
fmtMessage, |
||||
showSeverity, |
||||
log, |
||||
logTrace, |
||||
logDebug, |
||||
logInfo, |
||||
logWarning, |
||||
logError, |
||||
logWith, |
||||
logTraceWith, |
||||
logDebugWith, |
||||
logInfoWith, |
||||
logWarningWith, |
||||
logErrorWith |
||||
) where |
||||
|
||||
import Colog (LogAction (unLogAction), WithLog, |
||||
logMsg) |
||||
import Control.Monad.IO.Class (MonadIO (liftIO)) |
||||
import qualified Data.Text as T |
||||
import Data.Time (UTCTime, defaultTimeLocale, |
||||
getCurrentTime) |
||||
import Data.Time.Format.ISO8601 (iso8601Show) |
||||
import Prelude hiding (log) |
||||
import System.Console.ANSI (Color (Cyan, Green, Red, White, Yellow), |
||||
ColorIntensity (Dull, Vivid), |
||||
ConsoleLayer (Foreground), |
||||
SGR (Reset, SetColor), setSGRCode) |
||||
|
||||
|
||||
data Severity = |
||||
Trace |
||||
| Debug |
||||
| Info |
||||
| Warning |
||||
| Error |
||||
deriving (Show, Eq, Ord) |
||||
|
||||
data Message = |
||||
Message |
||||
{ |
||||
msgTimestamp :: UTCTime, |
||||
msgComponent :: T.Text, |
||||
msgSeverity :: Severity, |
||||
msgText :: T.Text |
||||
} deriving (Show, Eq) |
||||
|
||||
fmtMessage :: Message -> T.Text |
||||
fmtMessage Message{..} = |
||||
(bracketed . T.pack . iso8601Show) msgTimestamp <> |
||||
bracketed msgComponent <> |
||||
showSeverity msgSeverity <> |
||||
" " <> |
||||
msgText |
||||
where |
||||
bracketed txt = "[" <> txt <> "]" |
||||
|
||||
showSeverity :: Severity -> T.Text |
||||
showSeverity = \case |
||||
Trace -> color White Dull "[Trace] " |
||||
Debug -> color Cyan Dull "[Debug] " |
||||
Info -> color Green Vivid "[Info] " |
||||
Warning -> color Yellow Vivid "[Warning]" |
||||
Error -> color Red Vivid "[Error] " |
||||
where |
||||
color c h txt = T.pack (setSGRCode [SetColor Foreground h c]) |
||||
<> txt |
||||
<> T.pack (setSGRCode [Reset]) |
||||
|
||||
logWith :: (MonadIO m) => LogAction m Message -> Severity -> T.Text -> T.Text -> m () |
||||
logWith act sev comp txt = do |
||||
now <- liftIO getCurrentTime |
||||
unLogAction act $ Message now comp sev txt |
||||
|
||||
logTraceWith :: (MonadIO m) => LogAction m Message -> T.Text -> T.Text -> m () |
||||
logTraceWith act = logWith act Trace |
||||
|
||||
logDebugWith :: (MonadIO m) => LogAction m Message -> T.Text -> T.Text -> m () |
||||
logDebugWith act = logWith act Debug |
||||
|
||||
logInfoWith :: (MonadIO m) => LogAction m Message -> T.Text -> T.Text -> m () |
||||
logInfoWith act = logWith act Info |
||||
|
||||
logWarningWith :: (MonadIO m) => LogAction m Message -> T.Text -> T.Text -> m () |
||||
logWarningWith act = logWith act Warning |
||||
|
||||
logErrorWith :: (MonadIO m) => LogAction m Message -> T.Text -> T.Text -> m () |
||||
logErrorWith act = logWith act Error |
||||
|
||||
log :: (MonadIO m, WithLog env Message m) => Severity -> T.Text -> T.Text -> m () |
||||
log sev comp txt = do |
||||
now <- liftIO getCurrentTime |
||||
logMsg $ Message now comp sev txt |
||||
|
||||
logTrace :: (MonadIO m, WithLog env Message m) => T.Text -> T.Text -> m () |
||||
logTrace = log Trace |
||||
|
||||
logDebug :: (MonadIO m, WithLog env Message m) => T.Text -> T.Text -> m () |
||||
logDebug = log Debug |
||||
|
||||
logInfo :: (MonadIO m, WithLog env Message m) => T.Text -> T.Text -> m () |
||||
logInfo = log Info |
||||
|
||||
logWarning :: (MonadIO m, WithLog env Message m) => T.Text -> T.Text -> m () |
||||
logWarning = log Warning |
||||
|
||||
logError :: (MonadIO m, WithLog env Message m) => T.Text -> T.Text -> m () |
||||
logError = log Error |
||||
Loading…
Reference in new issue