apiary-logger 0.11.3.2 → 0.16.0
raw patch · 3 files changed
+95/−106 lines, 3 filesdep +lifted-basedep +transformersdep −mtldep −reflectiondep ~apiaryPVP ok
version bump matches the API change (PVP)
Dependencies added: lifted-base, transformers
Dependencies removed: mtl, reflection
Dependency ranges changed: apiary
API changes (from Hackage documentation)
- Web.Apiary.Logger: File :: FilePath -> LogDest
- Web.Apiary.Logger: GivenLoggerT :: m a -> GivenLoggerT m a
- Web.Apiary.Logger: Null :: LogDest
- Web.Apiary.Logger: Stderr :: LogDest
- Web.Apiary.Logger: Stdout :: LogDest
- 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: newtype GivenLoggerT m a
- Web.Apiary.Logger: runGivenLoggerT :: GivenLoggerT m a -> m a
- Web.Apiary.Logger: type HasLogger = Given Logger
- Web.Apiary.Logger: withLogger :: LogConfig -> (HasLogger => IO a) -> IO a
- Web.Apiary.Logger: withLogger' :: LogConfig -> (((HasLogger => r) -> r) -> IO a) -> IO a
+ Web.Apiary.Logger: LogFile :: FilePath -> LogDest
+ Web.Apiary.Logger: LogStderr :: LogDest
+ Web.Apiary.Logger: LogStdout :: LogDest
+ Web.Apiary.Logger: NoLog :: LogDest
+ Web.Apiary.Logger: data LogWrapper exts m a
+ Web.Apiary.Logger: data Logger
+ Web.Apiary.Logger: initLogger :: (MonadBaseControl IO m, MonadIO m) => LogConfig -> Initializer' m Logger
+ Web.Apiary.Logger: instance (Monad actM, MonadIO m, Has Logger exts) => MonadLogger (ApiaryT exts prms actM m)
+ Web.Apiary.Logger: instance (MonadIO m, Has Logger exts) => MonadLogger (ActionT exts m)
+ Web.Apiary.Logger: instance (MonadIO m, Has Logger exts) => MonadLogger (LogWrapper exts m)
+ Web.Apiary.Logger: instance Applicative m => Applicative (LogWrapper exts m)
+ Web.Apiary.Logger: instance Default LogConfig
+ Web.Apiary.Logger: instance Functor m => Functor (LogWrapper exts m)
+ Web.Apiary.Logger: instance Monad m => Monad (LogWrapper exts m)
+ Web.Apiary.Logger: instance MonadBase b m => MonadBase b (LogWrapper exts m)
+ Web.Apiary.Logger: instance MonadBaseControl b m => MonadBaseControl b (LogWrapper exts m)
+ Web.Apiary.Logger: instance MonadIO m => MonadIO (LogWrapper exts m)
+ Web.Apiary.Logger: instance MonadTrans (LogWrapper exts)
+ Web.Apiary.Logger: instance MonadTransControl (LogWrapper exts)
+ Web.Apiary.Logger: runLogWrapper :: Extensions exts -> LogWrapper exts m a -> m a
- Web.Apiary.Logger: logging :: (MonadIO m, HasLogger) => LogStr -> ActionT m ()
+ Web.Apiary.Logger: logging :: (Has Logger exts, MonadIO m) => LogStr -> ActionT exts m ()
Files
- apiary-logger.cabal +6/−6
- src/Web/Apiary/Logger.hs +89/−46
- src/Web/Apiary/Logger/Internal.hs +0/−54
apiary-logger.cabal view
@@ -1,5 +1,5 @@ name: apiary-logger-version: 0.11.3.2+version: 0.16.0 synopsis: fast-logger support for apiary web framework. description: example: <https://github.com/philopon/apiary/blob/master/examples/persistent.hs>@@ -18,16 +18,16 @@ library exposed-modules: Web.Apiary.Logger- other-modules: Web.Apiary.Logger.Internal build-depends: base >=4.6 && <4.8- , apiary >=0.8 && <0.16+ , apiary >=0.16 && <0.17 , fast-logger >=2.1 && <2.3 , monad-logger >=0.3 && <0.4- , reflection >=1.4 && <1.6 , data-default-class >=0.0 && <0.1- , monad-control >=0.3 && <0.4- , mtl >=2.1 && <2.3++ , transformers >=0.2 && <0.5 , transformers-base >=0.4 && <0.5+ , monad-control >=0.3 && <0.4+ , lifted-base >=0.2 && <0.3 hs-source-dirs: src ghc-options: -O2 -Wall default-language: Haskell2010
src/Web/Apiary/Logger.hs view
@@ -1,76 +1,119 @@-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-} -module Web.Apiary.Logger (+module Web.Apiary.Logger+ ( Logger -- * configuration- I.LogDest(..), I.LogConfig(..), HasLogger+ , LogDest(..), LogConfig(..) -- * initialize- , withLogger- , withLogger'+ , initLogger -- * action , logging -- * wrapper- , GivenLoggerT(..)-- -- * reexports- , module Data.Default.Class+ , LogWrapper, runLogWrapper ) where import System.Log.FastLogger -import Web.Apiary-import qualified Web.Apiary.Logger.Internal as I- import Control.Applicative import Control.Monad import Control.Monad.Base-import Control.Monad.Trans-import Control.Monad.Trans.Control+import Control.Monad.IO.Class+import Control.Monad.Trans.Class import Control.Monad.Logger+import Control.Monad.Trans.Reader+import Control.Monad.Trans.Control+import Control.Exception.Lifted import Data.Default.Class-import Data.Reflection -type HasLogger = Given I.Logger+import Data.Apiary.Proxy+import Web.Apiary+import Data.Apiary.Extension -withLogger :: I.LogConfig -> (HasLogger => IO a) -> IO a-withLogger c m = I.withLogger c (\l -> give l m)+data LogDest+ = LogFile FilePath+ | LogStdout+ | LogStderr+ | NoLog -withLogger' :: I.LogConfig -> (((HasLogger => r) -> r) -> IO a) -> IO a-withLogger' c m = I.withLogger c (\l -> m (give l))+data LogConfig = LogConfig+ { bufferSize :: BufSize+ , logDest :: LogDest+ } -logging :: (MonadIO m, HasLogger) => LogStr -> ActionT m ()-logging = I.logging given+instance Default LogConfig where+ def = LogConfig defaultBufSize LogStderr -newtype GivenLoggerT m a = GivenLoggerT { runGivenLoggerT :: m a }- deriving(Functor, Applicative, Monad, MonadIO)+-- | logger extension data type.+data Logger = Logger+ { pushLog :: LogStr -> IO ()+ , closeLog :: IO ()+ } -instance MonadBase b m => MonadBase b (GivenLoggerT m) where- liftBase = GivenLoggerT . liftBase+newLogger :: BufSize -> LogDest -> IO Logger+newLogger s (LogFile p) = newFileLoggerSet s p >>= \l -> + return $ Logger (pushLogStr l) (flushLogStr l)+newLogger s LogStdout = newStdoutLoggerSet s >>= \l -> + return $ Logger (pushLogStr l) (flushLogStr l)+newLogger s LogStderr = newStderrLoggerSet s >>= \l -> + return $ Logger (pushLogStr l) (flushLogStr l)+newLogger _ NoLog = return $ Logger (\_ -> return ()) (return ()) -instance MonadTrans GivenLoggerT where- lift = GivenLoggerT+-- | logger initializer.+initLogger :: (MonadBaseControl IO m, MonadIO m) => LogConfig -> Initializer' m Logger+initLogger LogConfig{..} = initializer $ bracket+ (liftIO $ newLogger bufferSize logDest)+ (liftIO . closeLog) $ return -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+-- | push log.+logging :: (Has Logger exts, MonadIO m)+ => LogStr -> ActionT exts m ()+logging m = do+ l <- getExt (Proxy :: Proxy Logger)+ liftIO $ pushLog l m -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, Has Logger exts) => MonadLogger (ActionT exts m) where+ monadLoggerLog loc src lv msg = do+ l <- getExt (Proxy :: Proxy Logger)+ liftIO . pushLog l $ defaultLogStr loc src lv (toLogStr msg) -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 (Monad actM, MonadIO m, Has Logger exts) => MonadLogger (ApiaryT exts prms actM m) where+ monadLoggerLog loc src lv msg = do+ l <- apiaryExt (Proxy :: Proxy Logger)+ liftIO . pushLog l $ 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)+-- | wrapper to use as MonadLogger using Logger Extenson.+newtype LogWrapper exts m a =+ LogWrapper { unLogWrapper :: ReaderT (Extensions exts) m a }+ deriving ( Functor, Applicative+ , Monad, MonadIO, MonadTrans, MonadBase b)++runLogWrapper :: Extensions exts -> LogWrapper exts m a -> m a+runLogWrapper e = flip runReaderT e . unLogWrapper++instance (MonadIO m, Has Logger exts) => MonadLogger (LogWrapper exts m) where+ monadLoggerLog loc src lv msg = do+ l <- getExtension (Proxy :: Proxy Logger) `liftM` LogWrapper ask+ liftIO . pushLog l $ defaultLogStr loc src lv (toLogStr msg)++instance MonadTransControl (LogWrapper exts) where+ newtype StT (LogWrapper exts) a = StLogWrapper { unStLogWrapper :: StT (ReaderT (Extensions exts)) a }+ liftWith = defaultLiftWith LogWrapper unLogWrapper StLogWrapper+ restoreT = defaultRestoreT LogWrapper unStLogWrapper++instance MonadBaseControl b m => MonadBaseControl b (LogWrapper exts m) where+ newtype StM (LogWrapper exts m) a = StMLogWrapper { unStMLogWrapper :: ComposeSt (LogWrapper exts) m a }+ liftBaseWith = defaultLiftBaseWith StMLogWrapper+ restoreM = defaultRestoreM unStMLogWrapper
− src/Web/Apiary/Logger/Internal.hs
@@ -1,54 +0,0 @@-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE ImplicitParams #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}--module Web.Apiary.Logger.Internal where--import System.Log.FastLogger-import Web.Apiary hiding (Default(..), File)-import Control.Exception-import Data.Default.Class--data LogDest- = File FilePath- | Stdout- | Stderr- | Null--data LogConfig = LogConfig- { bufferSize :: BufSize- , logDest :: LogDest- }--data Logger = Logger- { pushLog :: LogStr -> IO ()- , closeLog :: IO ()- }--instance Default LogConfig where- def = LogConfig defaultBufSize Stderr--newLogger :: BufSize -> LogDest -> IO Logger-newLogger s (File p) = newFileLoggerSet s p >>= \l -> - return $ Logger (pushLogStr l) (flushLogStr l)-newLogger s Stdout = newStdoutLoggerSet s >>= \l -> - return $ Logger (pushLogStr l) (flushLogStr l)-newLogger s Stderr = newStderrLoggerSet s >>= \l -> - return $ Logger (pushLogStr l) (flushLogStr l)-newLogger _ Null = return $ Logger (\_ -> return ()) (return ())--withLogger :: LogConfig -> (Logger -> IO a) -> IO a-withLogger LogConfig{..} m = bracket- (newLogger bufferSize logDest)- closeLog- (\l -> m l)--logging :: MonadIO m => Logger -> LogStr -> ActionT m ()-logging logger msg = liftIO $ pushLog logger msg-