wai-extra 3.1.7 → 3.1.8
raw patch · 3 files changed
+79/−13 lines, 3 filesdep ~wai-loggerPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: wai-logger
API changes (from Hackage documentation)
+ Network.Wai.Middleware.RequestLogger: ApacheWithSettings :: ApacheSettings -> OutputFormat
+ Network.Wai.Middleware.RequestLogger: data ApacheSettings
+ Network.Wai.Middleware.RequestLogger: defaultApacheSettings :: ApacheSettings
+ Network.Wai.Middleware.RequestLogger: defaultRequestLoggerSettings :: RequestLoggerSettings
+ Network.Wai.Middleware.RequestLogger: setApacheIPAddrSource :: IPAddrSource -> ApacheSettings -> ApacheSettings
+ Network.Wai.Middleware.RequestLogger: setApacheRequestFilter :: (Request -> Response -> Bool) -> ApacheSettings -> ApacheSettings
+ Network.Wai.Middleware.RequestLogger: setApacheUserGetter :: (Request -> Maybe ByteString) -> ApacheSettings -> ApacheSettings
Files
- ChangeLog.md +4/−0
- Network/Wai/Middleware/RequestLogger.hs +73/−11
- wai-extra.cabal +2/−2
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for wai-extra +## 3.1.8++* Added an `ApacheWithSettings` output format for `RequestLogger` that allows request filtering similar to `DetailedWithSettings` and logging of the current user via wai-logger's `initLoggerUser` [#866](https://github.com/yesodweb/wai/pull/866)+ ## 3.1.7 * Added new `mPrelogRequests` option to `DetailedSettings` [#857](https://github.com/yesodweb/wai/pull/857)
Network/Wai/Middleware/RequestLogger.hs view
@@ -9,11 +9,17 @@ -- * Create more versions , mkRequestLogger , RequestLoggerSettings+ , defaultRequestLoggerSettings , outputFormat , autoFlush , destination , OutputFormat (..)- , DetailedSettings(..)+ , ApacheSettings+ , defaultApacheSettings+ , setApacheIPAddrSource+ , setApacheRequestFilter+ , setApacheUserGetter+ , DetailedSettings (..) , OutputFormatter , OutputFormatterWithDetails , OutputFormatterWithDetailsAndHeaders@@ -51,16 +57,65 @@ import Network.Wai.Middleware.RequestLogger.Internal import Network.Wai.Header (contentLength) import Data.Text.Encoding (decodeUtf8')+import Network.Wai (Request) -- | The logging format. data OutputFormat = Apache IPAddrSource+ | ApacheWithSettings ApacheSettings -- ^ @since 3.1.8 | Detailed Bool -- ^ use colors? | DetailedWithSettings DetailedSettings -- ^ @since 3.1.3 | CustomOutputFormat OutputFormatter | CustomOutputFormatWithDetails OutputFormatterWithDetails | CustomOutputFormatWithDetailsAndHeaders OutputFormatterWithDetailsAndHeaders +-- | Settings for the `ApacheWithSettings` `OutputFormat`. This is purposely kept as an abstract data+-- type so that new settings can be added without breaking backwards+-- compatibility. In order to create an 'ApacheSettings' value, use 'defaultApacheSettings'+-- and the various \'setApache\' functions to modify individual fields. For example:+--+-- > setApacheIPAddrSource FromHeader defaultApacheSettings+--+-- @since 3.1.8+data ApacheSettings = ApacheSettings+ { apacheIPAddrSource :: IPAddrSource+ , apacheUserGetter :: Request -> Maybe BS.ByteString+ , apacheRequestFilter :: Request -> Response -> Bool+ }++defaultApacheSettings :: ApacheSettings+defaultApacheSettings = ApacheSettings+ { apacheIPAddrSource = FromSocket+ , apacheRequestFilter = \_ _ -> True+ , apacheUserGetter = \_ -> Nothing+ }++-- | Where to take IP addresses for clients from. See 'IPAddrSource' for more information.+--+-- Default value: FromSocket+--+-- @since 3.1.8+setApacheIPAddrSource :: IPAddrSource -> ApacheSettings -> ApacheSettings+setApacheIPAddrSource x y = y { apacheIPAddrSource = x }++-- | Function that allows you to filter which requests are logged, based on+-- the request and response+--+-- Default: log all requests+--+-- @since 3.1.8+setApacheRequestFilter :: (Request -> Response -> Bool) -> ApacheSettings -> ApacheSettings+setApacheRequestFilter x y = y { apacheRequestFilter = x }++-- | Function that allows you to get the current user from the request, which+-- will then be added in the log.+--+-- Default: return no user+--+-- @since 3.1.8+setApacheUserGetter :: (Request -> Maybe BS.ByteString) -> ApacheSettings -> ApacheSettings+setApacheUserGetter x y = y { apacheUserGetter = x }+ -- | Settings for the `Detailed` `OutputFormat`. -- -- `mModifyParams` allows you to pass a function to hide confidential@@ -141,12 +196,15 @@ , destination :: Destination } +defaultRequestLoggerSettings :: RequestLoggerSettings+defaultRequestLoggerSettings = RequestLoggerSettings+ { outputFormat = Detailed True+ , autoFlush = True+ , destination = Handle stdout+ }+ instance Default RequestLoggerSettings where- def = RequestLoggerSettings- { outputFormat = Detailed True- , autoFlush = True- , destination = Handle stdout- }+ def = defaultRequestLoggerSettings mkRequestLogger :: RequestLoggerSettings -> IO Middleware mkRequestLogger RequestLoggerSettings{..} = do@@ -160,7 +218,11 @@ Apache ipsrc -> do getdate <- getDateGetter flusher apache <- initLogger ipsrc (LogCallback callback flusher) getdate- return $ apacheMiddleware apache+ return $ apacheMiddleware (\_ _ -> True) apache+ ApacheWithSettings ApacheSettings{..} -> do+ getdate <- getDateGetter flusher+ apache <- initLoggerUser (Just apacheUserGetter) apacheIPAddrSource (LogCallback callback flusher) getdate+ return $ apacheMiddleware apacheRequestFilter apache Detailed useColors -> let settings = def { useColors = useColors} in detailedMiddleware callbackAndFlush settings@@ -176,10 +238,10 @@ getdate <- getDateGetter flusher return $ customMiddlewareWithDetailsAndHeaders callbackAndFlush getdate formatter -apacheMiddleware :: ApacheLoggerActions -> Middleware-apacheMiddleware ala app req sendResponse = app req $ \res -> do- let msize = contentLength (responseHeaders res)- apacheLogger ala req (responseStatus res) msize+apacheMiddleware :: (Request -> Response -> Bool) -> ApacheLoggerActions -> Middleware+apacheMiddleware applyRequestFilter ala app req sendResponse = app req $ \res -> do+ when (applyRequestFilter req res) $+ apacheLogger ala req (responseStatus res) $ contentLength (responseHeaders res) sendResponse res customMiddleware :: Callback -> IO ZonedDate -> OutputFormatter -> Middleware
wai-extra.cabal view
@@ -1,5 +1,5 @@ Name: wai-extra-Version: 3.1.7+Version: 3.1.8 Synopsis: Provides some basic WAI handlers and middleware. description: Provides basic WAI handler and middleware functionality:@@ -99,7 +99,7 @@ , case-insensitive >= 0.2 , data-default-class , fast-logger >= 2.4.5- , wai-logger >= 2.3.2+ , wai-logger >= 2.3.7 , ansi-terminal , resourcet >= 0.4.6 && < 1.3 , containers