diff --git a/Network/Wai/Logger.hs b/Network/Wai/Logger.hs
--- a/Network/Wai/Logger.hs
+++ b/Network/Wai/Logger.hs
@@ -55,7 +55,6 @@
 import Control.Concurrent (MVar, newMVar, tryTakeMVar, putMVar)
 import Control.Exception (handle, SomeException(..), bracket)
 import Control.Monad (when, void)
-import Data.IORef (IORef, atomicModifyIORef', newIORef, writeIORef)
 import Network.HTTP.Types (Status)
 import Network.Wai (Request)
 import System.EasyFile (getFileSize)
@@ -63,6 +62,7 @@
 
 import Network.Wai.Logger.Apache
 import Network.Wai.Logger.Date
+import Network.Wai.Logger.IORef
 import Network.Wai.Logger.IP (showSockAddr)
 
 ----------------------------------------------------------------
diff --git a/Network/Wai/Logger/IORef.hs b/Network/Wai/Logger/IORef.hs
new file mode 100644
--- /dev/null
+++ b/Network/Wai/Logger/IORef.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE CPP #-}
+
+module Network.Wai.Logger.IORef (
+       IORef
+     , newIORef
+     , readIORef
+     , writeIORef
+     , atomicModifyIORef'
+     ) where
+
+import Data.IORef
+
+#if !MIN_VERSION_base(4, 6, 0)
+atomicModifyIORef' :: IORef a -> (a -> (a,b)) -> IO b
+atomicModifyIORef' ref f = do
+    b <- atomicModifyIORef ref
+            (\x -> let (a, b) = f x
+                    in (a, a `seq` b))
+    b `seq` return b
+#endif
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:                2.2.2
+Version:                2.2.3
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -17,6 +17,7 @@
   Other-Modules:        Network.Wai.Logger.Apache
                         Network.Wai.Logger.Date
                         Network.Wai.Logger.IP
+                        Network.Wai.Logger.IORef
   Build-Depends:        base >= 4 && < 5
                       , auto-update
                       , blaze-builder
