wai-logger 0.1.4 → 0.2.0
raw patch · 4 files changed
+29/−127 lines, 4 filesdep −old-localedep −timedep −unixdep ~fast-loggerdep ~http-typesdep ~wai
Dependencies removed: old-locale, time, unix
Dependency ranges changed: fast-logger, http-types, wai
Files
- Network/Wai/Logger.hs +14/−46
- Network/Wai/Logger/Date.hs +0/−63
- Network/Wai/Logger/Format.hs +4/−4
- wai-logger.cabal +11/−14
Network/Wai/Logger.hs view
@@ -2,7 +2,7 @@ -- | Logging system for WAI applications. ----- High level sample code:+-- Sample code: -- -- > {-# LANGUAGE OverloadedStrings #-} -- > module Main where@@ -14,51 +14,17 @@ -- > import Network.Wai -- > import Network.Wai.Handler.Warp -- > import Network.Wai.Logger--- > import System.IO -- > -- > main :: IO () -- > main = do--- > logger <- stdoutApacheLoggerInit FromSocket--- > run 3000 $ logapp logger+-- > aplogger <- stdoutApacheLoggerInit FromSocket True+-- > run 3000 $ logapp aplogger -- > -- > logapp :: ApacheLogger -> Application--- > logapp logger req = do--- > let status = status200--- > len = 4--- > liftIO $ logger req status (Just len)--- > liftIO $ hFlush stdout--- > return $ ResponseBuilder status--- > [("Content-Type", "text/plain")--- > ,("Content-Length", pack (show len))]--- > $ fromByteString "PONG"------ Low level sample code:------ > {-# LANGUAGE OverloadedStrings #-}--- > module Main where--- >--- > import Blaze.ByteString.Builder (fromByteString)--- > import Control.Monad.IO.Class (liftIO)--- > import Data.ByteString.Char8--- > import Network.HTTP.Types (status200)--- > import Network.Wai--- > import Network.Wai.Handler.Warp--- > import Network.Wai.Logger--- > import System.IO--- > import System.Log.FastLogger--- >--- > main :: IO ()--- > main = do--- > dref <- dateInit--- > run 3000 $ logapp dref--- >--- > logapp :: DateRef -> Application--- > logapp dref req = do--- > date <- liftIO $ getDate dref+-- > logapp aplogger req = do -- > let status = status200 -- > len = 4--- > liftIO $ hPutLogStr stdout $ apacheFormat FromSocket date req status (Just len)--- > liftIO $ hFlush stdout+-- > liftIO $ aplogger req status (Just len) -- > return $ ResponseBuilder status -- > [("Content-Type", "text/plain") -- > ,("Content-Length", pack (show len))]@@ -68,14 +34,12 @@ ApacheLogger , stdoutApacheLoggerInit , module Network.Wai.Logger.Format- , module Network.Wai.Logger.Date , module Network.Wai.Logger.Utils ) where import Control.Applicative import Network.HTTP.Types import Network.Wai-import Network.Wai.Logger.Date import Network.Wai.Logger.Format import Network.Wai.Logger.Utils import System.IO@@ -85,11 +49,15 @@ type ApacheLogger = Request -> Status -> Maybe Integer -> IO () -- | Obtaining Apache style logger to stdout-stdoutApacheLoggerInit :: IPAddrSource -> IO ApacheLogger-stdoutApacheLoggerInit ipsrc = stdoutLogger ipsrc <$> dateInit+stdoutApacheLoggerInit :: IPAddrSource+ -> Bool -- ^ Automatically flush on each logging?+ -> IO ApacheLogger+stdoutApacheLoggerInit ipsrc autoFlash =+ stdoutLogger ipsrc <$> mkLogger autoFlash stdout -stdoutLogger :: IPAddrSource -> DateRef -> ApacheLogger-stdoutLogger ipsrc dateref req status msiz =- getDate dateref >>= hPutLogStr stdout . logmsg >> hFlush stdout+stdoutLogger :: IPAddrSource -> Logger -> ApacheLogger+stdoutLogger ipsrc logger req status msiz = do+ date <- loggerDate logger+ loggerPutStr logger $ logmsg date where logmsg date = apacheFormat ipsrc date req status msiz
− Network/Wai/Logger/Date.hs
@@ -1,63 +0,0 @@-{-# LANGUAGE CPP #-}--module Network.Wai.Logger.Date (- ZonedDate- , DateRef- , dateInit- , getDate- ) where--import Control.Applicative-import Data.ByteString (ByteString)-import qualified Data.ByteString.Char8 as BS-import Data.IORef-import Data.Time-import System.Locale-#if WINDOWS-#define TIME UTCTime-#define GETTIME getCurrentTime-#else-import System.Posix (EpochTime, epochTime)-import Data.Time.Clock.POSIX-#define TIME EpochTime-#define GETTIME epochTime-#endif---- | A type for zoned date.-type ZonedDate = ByteString--data DateCache = DateCache {- unixTime :: !TIME- , zonedDate :: !ZonedDate- }---- | Reference to the 'ZonedDate' cache.-newtype DateRef = DateRef (IORef DateCache)---- | Getting 'ZonedDate' from the 'ZonedDate' cache.-getDate :: DateRef -> IO ZonedDate-getDate (DateRef ref) = do- newEt <- GETTIME- cache <- readIORef ref- let oldEt = unixTime cache- if oldEt == newEt then- return $ zonedDate cache- else do- newCache <- newDate newEt- writeIORef ref newCache- return $ zonedDate newCache--newDate :: TIME -> IO DateCache-newDate et = DateCache et . format <$> toZonedTime et- where- toZonedTime = utcToLocalZonedTime . toUTC-#if WINDOWS- toUTC = id-#else- toUTC = posixSecondsToUTCTime . realToFrac-#endif- format = BS.pack . formatTime defaultTimeLocale "%d/%b/%Y:%T %z"---- | Initializing the 'ZonedDate' cache.-dateInit :: IO DateRef-dateInit = DateRef <$> (GETTIME >>= newDate >>= newIORef)
Network/Wai/Logger/Format.hs view
@@ -9,16 +9,16 @@ import Blaze.ByteString.Builder import Blaze.ByteString.Builder.Char8-import Data.ByteString.Char8 ()+import Data.ByteString.Char8 (ByteString) import Data.CaseInsensitive import Data.List import Data.Maybe import Data.Monoid import Network.HTTP.Types import Network.Wai-import Network.Wai.Logger.Date import Network.Wai.Logger.Utils import System.Log.FastLogger+import System.Log.FastLogger.Date {-| Source from which the IP source address of the client is obtained. -}@@ -79,7 +79,7 @@ bs = fromByteString (+++) = mappend -lookupRequestField' :: CI Ascii -> Request -> Ascii+lookupRequestField' :: CI ByteString -> Request -> ByteString lookupRequestField' k req = fromMaybe "" . lookup k $ requestHeaders req getSourceIP :: IPAddrSource -> Request -> LogStr@@ -90,7 +90,7 @@ getSourceIP' FromSocket = fromString . showSockAddr . remoteHost getSourceIP' FromHeader = fromByteString . getSource -getSource :: Request -> Ascii+getSource :: Request -> ByteString getSource req = addr where maddr = find (\x -> fst x `elem` ["x-real-ip", "x-forwarded-for"]) hdrs
wai-logger.cabal view
@@ -1,5 +1,5 @@ Name: wai-logger-Version: 0.1.4+Version: 0.2.0 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3@@ -10,22 +10,19 @@ Cabal-Version: >= 1.6 Build-Type: Simple library- if impl(ghc >= 6.12)- GHC-Options: -Wall -fno-warn-unused-do-bind- else- GHC-Options: -Wall+ GHC-Options: -Wall Exposed-Modules: Network.Wai.Logger- Network.Wai.Logger.Date Network.Wai.Logger.Format Network.Wai.Logger.Utils- Build-Depends: base >= 4 && < 5, time, old-locale,- bytestring, blaze-builder,- wai, fast-logger, http-types, case-insensitive,- network, byteorder- if os(windows)- cpp-options: -DWINDOWS- else- build-depends: unix+ Build-Depends: base >= 4 && < 5+ , blaze-builder+ , byteorder+ , bytestring+ , case-insensitive+ , fast-logger >= 0.2+ , http-types+ , network+ , wai Source-Repository head Type: git Location: git://github.com/kazu-yamamoto/logger.git