module Control.Eff.Log.Simple
( SimpleLog
, Severity(..)
, logTo
, debug
, info
, notice
, warning
, error
, critical
, alert
, panic
) where
import Prelude hiding (error)
import Control.Eff (Eff, SetMember)
import Control.Eff.Log
import Data.Monoid ((<>))
import Data.Typeable (Typeable)
import System.Log.FastLogger (toLogStr)
data Severity = DEBUG | INFO | NOTICE | WARNING | ERROR | CRITICAL | ALERT | PANIC
deriving (Bounded, Enum, Eq, Ord, Read, Show, Typeable)
logTo :: (Typeable l, SetMember Log (Log (Severity, l)) r)
=> Severity -> l -> Eff r ()
logTo sev line = logE (sev, line)
debug :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
debug = logTo DEBUG
info :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
info = logTo INFO
notice :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
notice = logTo NOTICE
warning :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
warning = logTo WARNING
error :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
error = logTo ERROR
critical :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
critical = logTo CRITICAL
alert :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
alert = logTo ALERT
panic :: (Typeable l, SetMember Log (Log (Severity, l)) r) => l -> Eff r ()
panic = logTo PANIC
type SimpleLog a = Log (Severity, a)
instance ShowLog a => ShowLog (Severity, a) where
showLog (sev, line) = "[" <> toLogStr (show sev) <> "] " <> showLog line