log-base 0.9.1.1 → 0.10.0.0
raw patch · 4 files changed
+22/−31 lines, 4 filesdep −monad-timePVP ok
version bump matches the API change (PVP)
Dependencies removed: monad-time
API changes (from Hackage documentation)
- Log.Class: class Monad m => MonadTime (m :: Type -> Type)
- Log.Class: currentTime :: MonadTime m => m UTCTime
- Log.Monad: instance (Control.Monad.Base.MonadBase GHC.Types.IO m, Control.Monad.Time.MonadTime m) => Log.Class.MonadLog (Log.Monad.LogT m)
+ Log.Monad: instance Control.Monad.Base.MonadBase GHC.Types.IO m => Log.Class.MonadLog (Log.Monad.LogT m)
- Log.Class: class MonadTime m => MonadLog m
+ Log.Class: class Monad m => MonadLog m
- Log.Class: logMessage :: MonadLog m => UTCTime -> LogLevel -> Text -> Value -> m ()
+ Log.Class: logMessage :: MonadLog m => LogLevel -> Text -> Value -> m ()
Files
- CHANGELOG.md +3/−0
- log-base.cabal +1/−2
- src/Log/Class.hs +11/−24
- src/Log/Monad.hs +7/−5
CHANGELOG.md view
@@ -1,3 +1,6 @@+# log -base-0.10.0.0 (2021-06-09)+* Drop `MonadTime` constraint and use system time by default.+ # log-base-0.9.1.1 (2021-05-28) * Support GHC 9.0.
log-base.cabal view
@@ -1,5 +1,5 @@ name: log-base-version: 0.9.1.1+version: 0.10.0.0 synopsis: Structured logging solution (base package) description: A library that provides a way to record structured log@@ -47,7 +47,6 @@ exceptions >=0.6, mmorph >=1.0.9 && <1.2, monad-control >=0.3,- monad-time >= 0.2, mtl, semigroups, stm >=2.4,
src/Log/Class.hs view
@@ -1,9 +1,6 @@ -- | The 'MonadLog' type class of monads with logging capabilities.-{-# OPTIONS_GHC -fno-warn-deprecated-flags #-}-{-# LANGUAGE OverlappingInstances #-} module Log.Class ( UTCTime- , MonadTime(..) , MonadLog(..) , logAttention , logInfo@@ -13,7 +10,6 @@ , logTrace_ ) where -import Control.Monad.Time import Control.Monad.Trans import Control.Monad.Trans.Control import Data.Aeson@@ -29,13 +25,13 @@ -- 'MonadLog' carries with it some associated state (the logging -- environment) that can be modified locally with 'localData' and -- 'localDomain'.-class MonadTime m => MonadLog m where+class Monad m => MonadLog m where -- | Write a message to the log.- logMessage :: UTCTime -- ^ Time of the event.- -> LogLevel -- ^ Log level.- -> T.Text -- ^ Log message.- -> Value -- ^ Additional data associated with the message.- -> m ()+ logMessage+ :: LogLevel -- ^ Log level.+ -> T.Text -- ^ Log message.+ -> Value -- ^ Additional data associated with the message.+ -> m () -- | Extend the additional data associated with each log message locally. localData :: [Pair] -> m a -> m a -- | Extend the current application domain locally.@@ -45,12 +41,12 @@ getLoggerEnv :: m LoggerEnv -- | Generic, overlapping instance.-instance (+instance {-# OVERLAPPABLE #-} ( MonadLog m , Monad (t m) , MonadTransControl t ) => MonadLog (t m) where- logMessage time level message = lift . logMessage time level message+ logMessage level message = lift . logMessage level message localData data_ m = controlT $ \run -> localData data_ (run m) localDomain domain m = controlT $ \run -> localDomain domain (run m) getLoggerEnv = lift getLoggerEnv@@ -64,17 +60,17 @@ -- | Log a message and its associated data using current time as the -- event time and the 'LogAttention' log level. logAttention :: (MonadLog m, ToJSON a) => T.Text -> a -> m ()-logAttention msg = logNow LogAttention msg . toJSON+logAttention msg = logMessage LogAttention msg . toJSON -- | Log a message and its associated data using current time as the -- event time and the 'LogInfo' log level. logInfo :: (MonadLog m, ToJSON a) => T.Text -> a -> m ()-logInfo msg = logNow LogInfo msg . toJSON+logInfo msg = logMessage LogInfo msg . toJSON -- | Log a message and its associated data using current time as the -- event time and the 'LogTrace' log level. logTrace :: (MonadLog m, ToJSON a) => T.Text -> a -> m ()-logTrace msg = logNow LogTrace msg . toJSON+logTrace msg = logMessage LogTrace msg . toJSON -- | Like 'logAttention', but without any additional associated data. logAttention_ :: MonadLog m => T.Text -> m ()@@ -87,12 +83,3 @@ -- | Like 'logTrace', but without any additional associated data. logTrace_ :: MonadLog m => T.Text -> m () logTrace_ = (`logTrace` emptyObject)---------------------------------------------- | Write a log message using the given log level, message text and--- additional data. Current time is used as the event time.-logNow :: MonadLog m => LogLevel -> T.Text -> Value -> m ()-logNow level message data_ = do- time <- currentTime- logMessage time level message data_
src/Log/Monad.hs view
@@ -16,7 +16,6 @@ import Control.Monad.Base import Control.Monad.Catch import Control.Monad.Error.Class-import Control.Monad.Fail (MonadFail) import Control.Monad.IO.Unlift import Control.Monad.Morph (MFunctor (..)) import Control.Monad.Reader@@ -25,7 +24,9 @@ import Control.Monad.Writer.Class import Data.Aeson import Data.Text (Text)+import Data.Time import Prelude+import qualified Control.Monad.Fail as MF import qualified Control.Exception as E import qualified Data.HashMap.Strict as H @@ -38,7 +39,7 @@ -- | Monad transformer that adds logging capabilities to the underlying monad. newtype LogT m a = LogT { unLogT :: InnerLogT m a } deriving (Alternative, Applicative, Functor, Monad, MonadBase b, MonadCatch- ,MonadIO, MonadMask, MonadPlus, MonadThrow, MonadTrans, MonadFail+ ,MonadIO, MonadMask, MonadPlus, MonadThrow, MonadTrans, MF.MonadFail ,MonadError e, MonadWriter w, MonadState s) instance MonadReader r m => MonadReader r (LogT m) where@@ -139,9 +140,10 @@ withRunInIO inner = LogT $ withRunInIO $ \run -> inner (run . unLogT) {-# INLINE withRunInIO #-} -instance (MonadBase IO m, MonadTime m) => MonadLog (LogT m) where- logMessage time level message data_ = LogT . ReaderT $ \logEnv ->- liftBase $ logMessageIO logEnv time level message data_+instance MonadBase IO m => MonadLog (LogT m) where+ logMessage level message data_ = LogT . ReaderT $ \logEnv -> liftBase $ do+ time <- getCurrentTime+ logMessageIO logEnv time level message data_ localData data_ = LogT . local (\e -> e { leData = data_ ++ leData e }) . unLogT