{-# 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 :: LogLevel -> String -> m ()
log LogLevel
level String
message = LogRecord -> m ()
forall (m :: * -> *). Logging m => LogRecord -> m ()
consumeLogRecord (LogLevel -> Maybe Location -> String -> LogRecord
LogRecord LogLevel
level Maybe Location
HasCallStack => Maybe Location
location String
message)
location :: HasCallStack => Maybe Location
location :: Maybe Location
location = case [(String, SrcLoc)] -> [(String, SrcLoc)]
forall a. [a] -> [a]
reverse [(String, SrcLoc)]
HasCallStack => [(String, SrcLoc)]
callStack of
(String
_, SrcLoc
loc) : [(String, SrcLoc)]
_ -> Location -> Maybe Location
forall a. a -> Maybe a
Just (Location -> Maybe Location) -> Location -> Maybe Location
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)
[(String, SrcLoc)]
_ -> Maybe Location
forall a. Maybe a
Nothing
trace :: (HasCallStack, Logging m) => String -> m ()
trace :: String -> m ()
trace = LogLevel -> String -> m ()
forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
TRACE
debug :: (HasCallStack, Logging m) => String -> m ()
debug :: String -> m ()
debug = LogLevel -> String -> m ()
forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
DEBUG
info :: (HasCallStack, Logging m) => String -> m ()
info :: String -> m ()
info = LogLevel -> String -> m ()
forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
INFO
warn :: (HasCallStack, Logging m) => String -> m ()
warn :: String -> m ()
warn = LogLevel -> String -> m ()
forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
WARN
error :: (HasCallStack, Logging m) => String -> m ()
error :: String -> m ()
error = LogLevel -> String -> m ()
forall (m :: * -> *).
(HasCallStack, Logging m) =>
LogLevel -> String -> m ()
log LogLevel
ERROR