diff --git a/Network/Wai/Logger.hs b/Network/Wai/Logger.hs
--- a/Network/Wai/Logger.hs
+++ b/Network/Wai/Logger.hs
@@ -2,7 +2,7 @@
 
 -- | Logging system for WAI applications.
 --
--- Sample code:
+-- High level sample code:
 --
 -- > {-# LANGUAGE OverloadedStrings #-}
 -- > module Main where
@@ -15,6 +15,36 @@
 -- > import Network.Wai.Handler.Warp
 -- > import Network.Wai.Logger
 -- > import System.IO
+-- >
+-- > main :: IO ()
+-- > main = do
+-- >     logger <- stdoutApacheLoggerInit FromSocket
+-- >     run 3000 $ logapp logger
+-- >
+-- > 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 ()
@@ -35,12 +65,32 @@
 -- >         $ fromByteString "PONG"
 
 module Network.Wai.Logger (
-    module Network.Wai.Logger.Format
+    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
+import System.Log.FastLogger
+
+-- | Apache style logger for WAI
+type ApacheLogger = Request -> Status -> Maybe Integer -> IO ()
+
+-- | Obtaining Apache style logger to stdout
+stdoutApacheLoggerInit :: IPAddrSource -> IO ApacheLogger
+stdoutApacheLoggerInit ipsrc = stdoutLogger ipsrc <$> dateInit
+
+stdoutLogger :: IPAddrSource -> DateRef -> ApacheLogger
+stdoutLogger ipsrc dateref req status msiz =
+    getDate dateref >>= hPutLogStr stdout . logmsg
+  where
+    logmsg date = apacheFormat ipsrc date req status msiz
 
diff --git a/Network/Wai/Logger/Date.hs b/Network/Wai/Logger/Date.hs
--- a/Network/Wai/Logger/Date.hs
+++ b/Network/Wai/Logger/Date.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE DoAndIfThenElse, BangPatterns #-}
 {-# LANGUAGE CPP #-}
 
 module Network.Wai.Logger.Date (
@@ -43,7 +42,7 @@
     let oldEt = unixTime cache
     if oldEt == newEt then
         return $ zonedDate cache
-    else do
+      else do
         newCache <- newDate newEt
         writeIORef ref newCache
         return $ zonedDate newCache
diff --git a/Network/Wai/Logger/Utils.hs b/Network/Wai/Logger/Utils.hs
--- a/Network/Wai/Logger/Utils.hs
+++ b/Network/Wai/Logger/Utils.hs
@@ -51,4 +51,3 @@
 showSockAddr (SockAddrInet6 _ _ (0,0,0,1) _)              = "::1"
 showSockAddr (SockAddrInet6 _ _ addr6 _)                  = showIPv6 addr6
 showSockAddr _                                            = "unknownSocket"
-
diff --git a/wai-logger.cabal b/wai-logger.cabal
--- a/wai-logger.cabal
+++ b/wai-logger.cabal
@@ -1,5 +1,5 @@
 Name:                   wai-logger
-Version:                0.1.2
+Version:                0.1.3
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -10,7 +10,10 @@
 Cabal-Version:          >= 1.6
 Build-Type:             Simple
 library
-  GHC-Options:          -Wall -fno-warn-unused-do-bind
+  if impl(ghc >= 6.12)
+    GHC-Options:        -Wall -fno-warn-unused-do-bind
+  else
+    GHC-Options:        -Wall
   Exposed-Modules:      Network.Wai.Logger
                         Network.Wai.Logger.Date
                         Network.Wai.Logger.Format
