packages feed

logging-facade 0.0.0 → 0.1.0

raw patch · 5 files changed

+39/−94 lines, 5 filesdep ~basenew-uploaderPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- System.Logging.Facade.TH: DEBUG :: LogLevel
- System.Logging.Facade.TH: ERROR :: LogLevel
- System.Logging.Facade.TH: INFO :: LogLevel
- System.Logging.Facade.TH: TRACE :: LogLevel
- System.Logging.Facade.TH: WARN :: LogLevel
- System.Logging.Facade.TH: class Monad m => Logging m
- System.Logging.Facade.TH: data LogLevel
- System.Logging.Facade.TH: debug :: ExpQ
- System.Logging.Facade.TH: error :: ExpQ
- System.Logging.Facade.TH: info :: ExpQ
- System.Logging.Facade.TH: instance Language.Haskell.TH.Syntax.Lift System.Logging.Facade.Types.LogLevel
- System.Logging.Facade.TH: log :: ExpQ
- System.Logging.Facade.TH: trace :: ExpQ
- System.Logging.Facade.TH: warn :: ExpQ
- System.Logging.Facade: debug :: Logging m => String -> m ()
+ System.Logging.Facade: debug :: (?loc :: CallStack) => Logging m => String -> m ()
- System.Logging.Facade: error :: Logging m => String -> m ()
+ System.Logging.Facade: error :: (?loc :: CallStack) => Logging m => String -> m ()
- System.Logging.Facade: info :: Logging m => String -> m ()
+ System.Logging.Facade: info :: (?loc :: CallStack) => Logging m => String -> m ()
- System.Logging.Facade: log :: Logging m => LogLevel -> String -> m ()
+ System.Logging.Facade: log :: (?loc :: CallStack) => Logging m => LogLevel -> String -> m ()
- System.Logging.Facade: trace :: Logging m => String -> m ()
+ System.Logging.Facade: trace :: (?loc :: CallStack) => Logging m => String -> m ()
- System.Logging.Facade: warn :: Logging m => String -> m ()
+ System.Logging.Facade: warn :: (?loc :: CallStack) => Logging m => String -> m ()

Files

logging-facade.cabal view
@@ -1,7 +1,7 @@ name:             logging-facade-version:          0.0.0-synopsis:         Simple logging abstraction that allows multiple backends-description:      Simple logging abstraction that allows multiple backends+version:          0.1.0+synopsis:         Simple logging abstraction that allows multiple back-ends+description:      Simple logging abstraction that allows multiple back-ends license:          MIT license-file:     LICENSE copyright:        (c) 2014 Simon Hengel@@ -21,7 +21,6 @@   exposed-modules:       System.Logging.Facade       System.Logging.Facade.Sink-      System.Logging.Facade.TH       System.Logging.Facade.Class       System.Logging.Facade.Types   build-depends:
src/System/Logging/Facade.hs view
@@ -1,3 +1,8 @@+{-# LANGUAGE CPP #-}+#if MIN_VERSION_base(4,8,1)+#define HAS_SOURCE_LOCATIONS+{-# LANGUAGE ImplicitParams #-}+#endif -- | -- This module is intended to be imported qualified: --@@ -21,26 +26,43 @@ import           System.Logging.Facade.Types import           System.Logging.Facade.Class +#ifdef HAS_SOURCE_LOCATIONS+import           GHC.SrcLoc+import           GHC.Stack+#define with_loc (?loc :: CallStack) =>+#else+#define with_loc+#endif+ -- | Produce a log message with specified log level.-log :: Logging m => LogLevel -> String -> m ()-log level message = consumeLogRecord (LogRecord level Nothing message)+log :: with_loc Logging m => LogLevel -> String -> m ()+log level message = consumeLogRecord (LogRecord level location message)+  where+    location :: Maybe Location+#ifdef HAS_SOURCE_LOCATIONS+    location = case reverse (getCallStack ?loc) of+      (_, loc) : _ -> Just $ Location (srcLocPackage loc) (srcLocModule loc) (srcLocFile loc) (srcLocStartLine loc) (srcLocStartCol loc)+      _ -> Nothing+#else+    location = Nothing+#endif  -- | Produce a log message with log level `TRACE`.-trace :: Logging m => String -> m ()+trace :: with_loc Logging m => String -> m () trace = log TRACE  -- | Produce a log message with log level `DEBUG`.-debug :: Logging m => String -> m ()+debug :: with_loc Logging m => String -> m () debug = log DEBUG  -- | Produce a log message with log level `INFO`.-info :: Logging m => String -> m ()+info :: with_loc Logging m => String -> m () info = log INFO  -- | Produce a log message with log level `WARN`.-warn :: Logging m => String -> m ()+warn :: with_loc Logging m => String -> m () warn = log WARN  -- | Produce a log message with log level `ERROR`.-error :: Logging m => String -> m ()+error :: with_loc Logging m => String -> m () error = log ERROR
src/System/Logging/Facade/Class.hs view
@@ -2,16 +2,15 @@ {-# OPTIONS_GHC -fno-warn-deprecations #-} -- to suppress deprecation warning for ErrorT module System.Logging.Facade.Class where -import           Data.Monoid import           Control.Monad.Trans.Class import           Control.Monad.Trans.Cont import           Control.Monad.Trans.Error import           Control.Monad.Trans.Identity import           Control.Monad.Trans.List import           Control.Monad.Trans.Maybe-import           Control.Monad.Trans.Reader import           Control.Monad.Trans.RWS.Lazy import qualified Control.Monad.Trans.RWS.Strict as Strict+import           Control.Monad.Trans.Reader import           Control.Monad.Trans.State.Lazy import qualified Control.Monad.Trans.State.Strict as Strict import           Control.Monad.Trans.Writer.Lazy@@ -21,8 +20,12 @@ import           Control.Monad.Trans.Except #endif -import           System.Logging.Facade.Types+#if !MIN_VERSION_base(4,8,0)+import           Data.Monoid+#endif+ import           System.Logging.Facade.Sink+import           System.Logging.Facade.Types  -- | A type class for monads with logging support class Monad m => Logging m where
− src/System/Logging/Facade/TH.hs
@@ -1,79 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}--- |--- This module is intended to be imported qualified:------ > import qualified System.Logging.Facade.TH as Log-module System.Logging.Facade.TH (--- * Producing log messages-  log-, trace-, debug-, info-, warn-, error---- * Types-, Logging-, LogLevel(..)-) where--import           Prelude hiding (mod, log, error)-import           Language.Haskell.TH-import           Language.Haskell.TH.Syntax--import           System.Logging.Facade.Types-import           System.Logging.Facade.Class---- |--- A Template Haskell version of `System.Logging.Facade.log` that adds a--- source location to the produced log record.-log :: ExpQ-log = [|\level -> consumeLogRecord . LogRecord level $(mkLocation)|]---- |--- A Template Haskell version of `System.Logging.Facade.trace` that adds a--- source location to the produced log record.-trace :: ExpQ-trace = [|$(log) TRACE|]---- |--- A Template Haskell version of `System.Logging.Facade.debug` that adds a--- source location to the produced log record.-debug :: ExpQ-debug = [|$(log) DEBUG|]---- |--- A Template Haskell version of `System.Logging.Facade.info` that adds a--- source location to the produced log record.-info :: ExpQ-info = [|$(log) INFO|]---- |--- A Template Haskell version of `System.Logging.Facade.warn` that adds a--- source location to the produced log record.-warn :: ExpQ-warn = [|$(log) WARN|]---- |--- A Template Haskell version of `System.Logging.Facade.error` that adds a--- source location to the produced log record.-error :: ExpQ-error = [|$(log) ERROR|]--instance Lift LogLevel where-  lift level = case level of-    TRACE -> [|TRACE|]-    DEBUG -> [|DEBUG|]-    INFO -> [|INFO|]-    WARN -> [|WARN|]-    ERROR -> [|ERROR|]--mkLocation :: ExpQ-mkLocation = do-  loc <- location-  let file = loc_filename loc-      package = loc_package loc-      mod = loc_module loc-      (line, column) = loc_start loc-  [|Just (Location {locationPackage = package, locationModule = mod, locationFile = file, locationLine = line, locationColumn = column})|]
test/System/Logging/FacadeSpec.hs view
@@ -16,7 +16,7 @@     it "writes a log message with log level INFO" $ do       ref <- newIORef []       let captureLogMessage :: LogSink-          captureLogMessage record = modifyIORef ref (record :)+          captureLogMessage record = modifyIORef ref (record {logRecordLocation = Nothing} :)       setLogSink captureLogMessage       info "some log message"       readIORef ref `shouldReturn` [LogRecord INFO Nothing "some log message"]