apiary-logger 0.8.0.0 → 0.9.0.0
raw patch · 3 files changed
+68/−51 lines, 3 filesdep ~apiarydep ~mtlPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: apiary, mtl
API changes (from Hackage documentation)
+ Web.Apiary.Logger: instance (MonadIO m, HasLogger) => MonadLogger (ActionT m)
+ Web.Apiary.Logger: instance (MonadIO m, HasLogger) => MonadLogger (GivenLoggerT m)
+ Web.Apiary.Logger: instance Applicative m => Applicative (GivenLoggerT m)
+ Web.Apiary.Logger: instance Functor m => Functor (GivenLoggerT m)
+ Web.Apiary.Logger: instance Monad m => Monad (GivenLoggerT m)
+ Web.Apiary.Logger: instance MonadBase b m => MonadBase b (GivenLoggerT m)
+ Web.Apiary.Logger: instance MonadBaseControl b m => MonadBaseControl b (GivenLoggerT m)
+ Web.Apiary.Logger: instance MonadIO m => MonadIO (GivenLoggerT m)
+ Web.Apiary.Logger: instance MonadTrans GivenLoggerT
+ Web.Apiary.Logger: instance MonadTransControl GivenLoggerT
- Web.Apiary.Logger: withLogger' :: LogConfig -> ((forall r. (HasLogger => r) -> r) -> IO a) -> IO a
+ Web.Apiary.Logger: withLogger' :: LogConfig -> (((HasLogger => r) -> r) -> IO a) -> IO a
Files
- apiary-logger.cabal +3/−3
- src/Web/Apiary/Logger.hs +61/−2
- src/Web/Apiary/Logger/Internal.hs +4/−46
apiary-logger.cabal view
@@ -1,5 +1,5 @@ name: apiary-logger-version: 0.8.0.0+version: 0.9.0.0 synopsis: fast-logger support for apiary web framework. description: example: <https://github.com/philopon/apiary/blob/master/examples/persistent.hs>@@ -20,13 +20,13 @@ exposed-modules: Web.Apiary.Logger other-modules: Web.Apiary.Logger.Internal build-depends: base >=4.6 && <4.8- , apiary >=0.8 && <0.9+ , apiary >=0.8 && <0.10 , fast-logger >=2.1 && <2.2 , monad-logger >=0.3 && <0.4 , reflection >=1.4 && <1.5 , data-default-class >=0.0 && <0.1 , monad-control >=0.3 && <0.4- , mtl >=2.1 && <2.2+ , mtl >=2.1 && <2.3 , transformers-base >=0.4 && <0.5 hs-source-dirs: src ghc-options: -O2 -Wall
src/Web/Apiary/Logger.hs view
@@ -1,6 +1,15 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+ module Web.Apiary.Logger ( -- * configuration- LogDest(..), LogConfig(..), HasLogger+ I.LogDest(..), I.LogConfig(..), HasLogger -- * initialize , withLogger , withLogger'@@ -13,5 +22,55 @@ , module Data.Default.Class ) where -import Web.Apiary.Logger.Internal+import qualified Web.Apiary.Logger.Internal as I+import Web.Apiary++import System.Log.FastLogger++import Control.Applicative+import Control.Monad+import Control.Monad.Base+import Control.Monad.Trans+import Control.Monad.Trans.Control+import Control.Monad.Logger+ import Data.Default.Class+import Data.Reflection++type HasLogger = Given I.Logger++withLogger :: I.LogConfig -> (HasLogger => IO a) -> IO a+withLogger c m = I.withLogger c (\l -> give l m)++withLogger' :: I.LogConfig -> (((HasLogger => r) -> r) -> IO a) -> IO a+withLogger' c m = I.withLogger c (\l -> m (give l))++logging :: (MonadIO m, HasLogger) => LogStr -> ActionT m ()+logging = I.logging given++newtype GivenLoggerT m a = GivenLoggerT { runGivenLoggerT :: m a }+ deriving(Functor, Applicative, Monad, MonadIO)++instance MonadBase b m => MonadBase b (GivenLoggerT m) where+ liftBase = GivenLoggerT . liftBase++instance MonadTrans GivenLoggerT where+ lift = GivenLoggerT++instance MonadBaseControl b m => MonadBaseControl b (GivenLoggerT m) where+ newtype StM (GivenLoggerT m) a = StMGivenLogger { unStMGivenLogger :: ComposeSt GivenLoggerT m a }+ liftBaseWith = defaultLiftBaseWith StMGivenLogger+ restoreM = defaultRestoreM unStMGivenLogger++instance MonadTransControl GivenLoggerT where+ newtype StT GivenLoggerT a = StGivenLogger { unStGivenLogger :: a }+ liftWith f = GivenLoggerT $ f $ liftM StGivenLogger . runGivenLoggerT+ restoreT = GivenLoggerT . liftM unStGivenLogger++instance (MonadIO m, HasLogger) => MonadLogger (GivenLoggerT m) where+ monadLoggerLog loc src lv msg = GivenLoggerT . liftIO $+ I.pushLog given (defaultLogStr loc src lv (toLogStr msg))++instance (MonadIO m, HasLogger) => MonadLogger (ActionT m) where+ monadLoggerLog loc src lv msg =+ I.logging given $ defaultLogStr loc src lv (toLogStr msg)
src/Web/Apiary/Logger/Internal.hs view
@@ -10,16 +10,9 @@ module Web.Apiary.Logger.Internal where -import Control.Applicative import Web.Apiary hiding (Default(..)) import System.Log.FastLogger-import Control.Monad-import Control.Monad.Base-import Control.Monad.Trans-import Control.Monad.Logger-import Control.Monad.Trans.Control import Control.Exception-import Data.Reflection import Data.Default.Class data LogDest@@ -41,8 +34,6 @@ instance Default LogConfig where def = LogConfig defaultBufSize Stderr -type HasLogger = Given Logger- newLogger :: BufSize -> LogDest -> IO Logger newLogger s (File p) = newFileLoggerSet s p >>= \l -> return $ Logger (pushLogStr l) (flushLogStr l)@@ -52,45 +43,12 @@ return $ Logger (pushLogStr l) (flushLogStr l) newLogger _ Null = return $ Logger (\_ -> return ()) (return ()) -withLogger :: LogConfig -> (HasLogger => IO a) -> IO a+withLogger :: LogConfig -> (Logger -> IO a) -> IO a withLogger LogConfig{..} m = bracket (newLogger bufferSize logDest) closeLog- (\l -> give l m)--withLogger' :: LogConfig- -> ((forall r. (HasLogger => r) -> r) -> IO a) -> IO a-withLogger' LogConfig{..} m = bracket- (newLogger bufferSize logDest)- closeLog- (\l -> m (give l))--logging :: (MonadIO m, HasLogger) => LogStr -> ActionT m ()-logging msg = liftIO $ pushLog given msg--newtype GivenLoggerT m a = GivenLoggerT { runGivenLoggerT :: m a }- deriving(Functor, Applicative, Monad, MonadIO)--instance MonadBase b m => MonadBase b (GivenLoggerT m) where- liftBase = GivenLoggerT . liftBase--instance MonadTrans GivenLoggerT where- lift = GivenLoggerT--instance MonadBaseControl b m => MonadBaseControl b (GivenLoggerT m) where- newtype StM (GivenLoggerT m) a = StMGivenLogger { unStMGivenLogger :: ComposeSt GivenLoggerT m a }- liftBaseWith = defaultLiftBaseWith StMGivenLogger- restoreM = defaultRestoreM unStMGivenLogger--instance MonadTransControl GivenLoggerT where- newtype StT GivenLoggerT a = StGivenLogger { unStGivenLogger :: a }- liftWith f = GivenLoggerT $ f $ liftM StGivenLogger . runGivenLoggerT- restoreT = GivenLoggerT . liftM unStGivenLogger+ (\l -> m l) -instance (MonadIO m, HasLogger) => MonadLogger (GivenLoggerT m) where- monadLoggerLog loc src lv msg = GivenLoggerT . liftIO $- pushLog given (defaultLogStr loc src lv (toLogStr msg))+logging :: MonadIO m => Logger -> LogStr -> ActionT m ()+logging logger msg = liftIO $ pushLog logger msg -instance (MonadIO m, HasLogger) => MonadLogger (ActionT m) where- monadLoggerLog loc src lv msg =- logging $ defaultLogStr loc src lv (toLogStr msg)