unclogging-0.1.0.1: src/Control/Effect/Unclog/Json.hs
{-# LANGUAGE TemplateHaskell #-}
-- | the @fused-effects@ + @Json@ frontend
module Control.Effect.Unclog.Json
( -- * logging functions for different log levels
debug
, info
, warn
, fatal
-- * helpers
, logJson
)
where
import Control.Effect.Unclog (publishLogEntry)
import Data.Aeson
import Data.ByteString qualified as BS
import Language.Haskell.TH.Syntax (Exp, Q, unTypeCode)
import Unclog.Common (LogLevel (..))
import Unclog.Frontend (mkLogEntry)
logJson :: LogLevel -> Q Exp
logJson lvl =
[|
\obj -> do
let entry ts = $(unTypeCode $ mkLogEntry lvl) ts (BS.toStrict . encode $ Object obj)
publishLogEntry entry
|]
debug :: Q Exp
debug = logJson Debug
info :: Q Exp
info = logJson Info
warn :: Q Exp
warn = logJson Warn
fatal :: Q Exp
fatal = logJson Fatal