wai-logger-0.2.0: Network/Wai/Logger.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Logging system for WAI applications.
--
-- 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
-- >
-- > main :: IO ()
-- > main = do
-- > aplogger <- stdoutApacheLoggerInit FromSocket True
-- > run 3000 $ logapp aplogger
-- >
-- > logapp :: ApacheLogger -> Application
-- > logapp aplogger req = do
-- > let status = status200
-- > len = 4
-- > liftIO $ aplogger req status (Just len)
-- > return $ ResponseBuilder status
-- > [("Content-Type", "text/plain")
-- > ,("Content-Length", pack (show len))]
-- > $ fromByteString "PONG"
module Network.Wai.Logger (
ApacheLogger
, stdoutApacheLoggerInit
, module Network.Wai.Logger.Format
, module Network.Wai.Logger.Utils
) where
import Control.Applicative
import Network.HTTP.Types
import Network.Wai
import Network.Wai.Logger.Format
import Network.Wai.Logger.Utils
import System.IO
import System.Log.FastLogger
-- | Apache style logger for WAI
type ApacheLogger = Request -> Status -> Maybe Integer -> IO ()
-- | Obtaining Apache style logger to stdout
stdoutApacheLoggerInit :: IPAddrSource
-> Bool -- ^ Automatically flush on each logging?
-> IO ApacheLogger
stdoutApacheLoggerInit ipsrc autoFlash =
stdoutLogger ipsrc <$> mkLogger autoFlash 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