wai-logger 2.2.7 → 2.3.0
raw patch · 3 files changed
+54/−4 lines, 3 files
Files
- Network/Wai/Logger.hs +26/−3
- Network/Wai/Logger/Apache.hs +27/−0
- wai-logger.cabal +1/−1
Network/Wai/Logger.hs view
@@ -34,8 +34,13 @@ -- * High level functions ApacheLogger , withStdoutLogger+ , ServerPushLogger -- * Creating a logger- , ApacheLoggerActions(..)+ , ApacheLoggerActions+ , apacheLogger+ , serverpushLogger+ , logRotator+ , logRemover , initLogger -- * Types , IPAddrSource(..)@@ -56,6 +61,7 @@ #endif import Control.Exception (bracket) import Control.Monad (void)+import Data.ByteString (ByteString) import Network.HTTP.Types (Status) import Network.Wai (Request) import System.Log.FastLogger@@ -85,12 +91,19 @@ -- | Apache style logger. type ApacheLogger = Request -> Status -> Maybe Integer -> IO () +-- | HTTP/2 server push logger in Apache style.+type ServerPushLogger = Request -> ByteString -> Integer -> IO ()++-- | Function set of Apache style logger. data ApacheLoggerActions = ApacheLoggerActions {+ -- | The Apache logger. apacheLogger :: ApacheLogger+ -- | The HTTP/2 server push logger.+ , serverpushLogger :: ServerPushLogger -- | This is obsoleted. Rotation is done on-demand. -- So, this is now an empty action. , logRotator :: IO ()- -- | Removing resources relating Apache logger.+ -- | Removing resources relating to Apache logger. -- E.g. flushing and deallocating internal buffers. , logRemover :: IO () }@@ -102,7 +115,12 @@ -> IO ApacheLoggerActions initLogger ipsrc typ tgetter = do (fl, cleanUp) <- newFastLogger typ- return $ ApacheLoggerActions (apache fl ipsrc tgetter) (return ()) cleanUp+ return $ ApacheLoggerActions {+ apacheLogger = apache fl ipsrc tgetter+ , serverpushLogger = serverpush fl ipsrc tgetter+ , logRotator = return ()+ , logRemover = cleanUp+ } --- | Checking if a log file can be written if 'LogType' is 'LogFileNoRotate' or 'LogFile'. logCheck :: LogType -> IO ()@@ -119,6 +137,11 @@ apache cb ipsrc dateget req st mlen = do zdata <- dateget cb (apacheLogStr ipsrc zdata req st mlen)++serverpush :: (LogStr -> IO ()) -> IPAddrSource -> IO FormattedTime -> ServerPushLogger+serverpush cb ipsrc dateget req path size = do+ zdata <- dateget+ cb (serverpushLogStr ipsrc zdata req path size) ---------------------------------------------------------------
Network/Wai/Logger/Apache.hs view
@@ -3,6 +3,7 @@ module Network.Wai.Logger.Apache ( IPAddrSource(..) , apacheLogStr+ , serverpushLogStr ) where #ifndef MIN_VERSION_base@@ -69,6 +70,32 @@ mua = requestHeaderUserAgent req #else mr = lookup "referer" $ requestHeaders req+ mua = lookup "user-agent" $ requestHeaders req+#endif++-- | HTTP/2 Push log format in the Apache style.+serverpushLogStr :: IPAddrSource -> FormattedTime -> Request -> ByteString -> Integer -> LogStr+serverpushLogStr ipsrc tmstr req path size =+ toLogStr (getSourceIP ipsrc req)+ <> " - - ["+ <> toLogStr tmstr+ <> "] \"PUSH "+ <> toLogStr path+ <> " HTTP/2\" 200 "+ <> toLogStr (show size)+ <> " \""+ <> toLogStr ref+ <> "\" \""+ <> toLogStr (fromMaybe "" mua)+ <> "\"\n"+ where+ ref = rawPathInfo req+#if !MIN_VERSION_base(4,5,0)+ (<>) = mappend+#endif+#if MIN_VERSION_wai(3,2,0)+ mua = requestHeaderUserAgent req+#else mua = lookup "user-agent" $ requestHeaders req #endif
wai-logger.cabal view
@@ -1,5 +1,5 @@ Name: wai-logger-Version: 2.2.7+Version: 2.3.0 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3