diff --git a/Network/Wai/Logger/Apache.hs b/Network/Wai/Logger/Apache.hs
--- a/Network/Wai/Logger/Apache.hs
+++ b/Network/Wai/Logger/Apache.hs
@@ -23,6 +23,7 @@
 import Data.Monoid (mappend)
 #endif
 import Network.HTTP.Types (Status, statusCode)
+import Network.HTTP.Types.Header (HeaderName)
 import Network.Wai (Request(..))
 import Network.Wai.Logger.IP
 import System.Log.FastLogger
@@ -37,6 +38,8 @@
     FromSocket
   -- | From X-Real-IP: or X-Forwarded-For: in the HTTP header.
   | FromHeader
+  -- | From a custom HTTP header, useful in proxied environment.
+  | FromHeaderCustom [HeaderName]
   -- | From the peer address if header is not found.
   | FromFallback
 
@@ -107,9 +110,10 @@
 -- getSourceIP = getSourceIP fromString fromByteString
 
 getSourceIP :: IPAddrSource -> Request -> ByteString
-getSourceIP FromSocket   = getSourceFromSocket
-getSourceIP FromHeader   = getSourceFromHeader
+getSourceIP FromSocket = getSourceFromSocket
+getSourceIP FromHeader = getSourceFromHeader
 getSourceIP FromFallback = getSourceFromFallback
+getSourceIP (FromHeaderCustom hs) = fromMaybe "-" . getSourceFromHeaderCustom hs
 
 -- |
 -- >>> getSourceFromSocket defaultRequest
@@ -151,8 +155,14 @@
 -- >>> getSource defaultRequest
 -- Nothing
 getSource :: Request -> Maybe ByteString
-getSource req = addr
+getSource = getSourceFromHeaders ["x-real-ip", "x-forwarded-for"]
+
+getSourceFromHeaders :: [HeaderName] -> Request -> Maybe ByteString
+getSourceFromHeaders headerNames req = addr
   where
-    maddr = find (\x -> fst x `elem` ["x-real-ip", "x-forwarded-for"]) hdrs
+    maddr = find (\(name,_) -> name `elem` headerNames) hdrs
     addr = fmap snd maddr
     hdrs = requestHeaders req
+
+getSourceFromHeaderCustom :: [HeaderName] -> Request -> Maybe ByteString
+getSourceFromHeaderCustom hs = getSourceFromHeaders hs
diff --git a/test/doctests.hs b/test/doctests.hs
deleted file mode 100644
--- a/test/doctests.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Main where
-
-import Build_doctests (flags, pkgs, module_sources)
-import Data.Foldable (traverse_)
-import Test.DocTest (doctest)
-
-main :: IO ()
-main = do
-    traverse_ putStrLn args
-    doctest args
-  where
-    args = flags ++ pkgs ++ module_sources
diff --git a/wai-logger.cabal b/wai-logger.cabal
--- a/wai-logger.cabal
+++ b/wai-logger.cabal
@@ -1,48 +1,39 @@
-Name:                   wai-logger
-Version:                2.4.0
-Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
-Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
-License:                BSD3
-License-File:           LICENSE
-Synopsis:               A logging system for WAI
-Description:            A logging system for WAI
-Category:               Web, Yesod
-Cabal-Version:          >= 1.10
-Build-Type:             Custom
-Tested-With:            GHC ==7.8.4 || ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.3
+cabal-version: >=1.10
+name:          wai-logger
+version:       2.4.1
+license:       BSD3
+license-file:  LICENSE
+maintainer:    Kazu Yamamoto <kazu@iij.ad.jp>
+author:        Kazu Yamamoto <kazu@iij.ad.jp>
+tested-with:
+    ghc ==7.8.4 || ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.3
 
-Custom-Setup
-  Setup-Depends:        base, Cabal, cabal-doctest >=1.0.6 && <1.1
+synopsis:      A logging system for WAI
+description:   A logging system for WAI(Web Application Interface)
+category:      Web, Yesod
+build-type:    Simple
 
-Library
-  Default-Language:     Haskell2010
-  GHC-Options:          -Wall
-  Exposed-Modules:      Network.Wai.Logger
-  Other-Modules:        Network.Wai.Logger.Apache
-                        Network.Wai.Logger.IP
-                        Network.Wai.Logger.IORef
-  Build-Depends:        base >= 4 && < 5
-                      , byteorder
-                      , bytestring
-                      , fast-logger >= 3
-                      , http-types
-                      , network
-                      , wai >= 2.0.0
- if impl(ghc >= 8)
-      Default-Extensions:  Strict StrictData
+source-repository head
+    type:     git
+    location: https://github.com/kazu-yamamoto/logger.git
 
-Test-Suite doctests
-  Type:                 exitcode-stdio-1.0
-  Default-Language:     Haskell2010
-  HS-Source-Dirs:       test
-  Ghc-Options:          -Wall
-  Main-Is:              doctests.hs
-  Build-Depends:        base
-                      , wai-logger
-                      , doctest >= 0.10.1
-  if impl(ghc >= 8)
-      Default-Extensions:  Strict StrictData
+library
+    exposed-modules:  Network.Wai.Logger
+    other-modules:
+        Network.Wai.Logger.Apache
+        Network.Wai.Logger.IP
+        Network.Wai.Logger.IORef
 
-Source-Repository head
-  Type:                 git
-  Location:             git://github.com/kazu-yamamoto/logger.git
+    default-language: Haskell2010
+    ghc-options:      -Wall
+    build-depends:
+        base >=4 && <5,
+        byteorder,
+        bytestring,
+        fast-logger >=3,
+        http-types,
+        network,
+        wai >=2.0.0
+
+    if impl(ghc >=8)
+        default-extensions: Strict StrictData
