{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
module System.Logging.Facade (
log
, trace
, debug
, info
, warn
, error
, Logging
, LogLevel(..)
) where
import Prelude hiding (log, error)
import Data.CallStack
import System.Logging.Facade.Types
import System.Logging.Facade.Class
log :: (HasCallStack, Logging m) => LogLevel -> String -> m ()
log :: forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
level String
message = forall (m :: * -> *). Logging m => LogRecord -> m ()
consumeLogRecord (LogLevel -> Maybe Location -> String -> LogRecord
LogRecord LogLevel
level HasCallStack => Maybe Location
location String
message)
location :: HasCallStack => Maybe Location
location :: HasCallStack => Maybe Location
location = case forall a. [a] -> [a]
reverse HasCallStack => CallStack
callStack of
(String
_, SrcLoc
loc) : CallStack
_ -> forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ String -> String -> String -> Int -> Int -> Location
Location (SrcLoc -> String
srcLocPackage SrcLoc
loc) (SrcLoc -> String
srcLocModule SrcLoc
loc) (SrcLoc -> String
srcLocFile SrcLoc
loc) (SrcLoc -> Int
srcLocStartLine SrcLoc
loc) (SrcLoc -> Int
srcLocStartCol SrcLoc
loc)
CallStack
_ -> forall a. Maybe a
Nothing
trace :: (HasCallStack, Logging m) => String -> m ()
trace :: forall (m :: * -> *). (HasCallStack, Logging m) => String -> m ()
trace = forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
TRACE
debug :: (HasCallStack, Logging m) => String -> m ()
debug :: forall (m :: * -> *). (HasCallStack, Logging m) => String -> m ()
debug = forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
DEBUG
info :: (HasCallStack, Logging m) => String -> m ()
info :: forall (m :: * -> *). (HasCallStack, Logging m) => String -> m ()
info = forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
INFO
warn :: (HasCallStack, Logging m) => String -> m ()
warn :: forall (m :: * -> *). (HasCallStack, Logging m) => String -> m ()
warn = forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
WARN
error :: (HasCallStack, Logging m) => String -> m ()
error :: forall (m :: * -> *). (HasCallStack, Logging m) => String -> m ()
error = forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
ERROR