diff --git a/Network/Wai/Logger.hs b/Network/Wai/Logger.hs
--- a/Network/Wai/Logger.hs
+++ b/Network/Wai/Logger.hs
@@ -42,6 +42,7 @@
   , serverpushLogger
   , logRotator
   , logRemover
+  , initLoggerUser
   , initLogger
   -- * Types
   , IPAddrSource(..)
@@ -112,17 +113,24 @@
 ----------------------------------------------------------------
 
 -- | Creating 'ApacheLogger' according to 'LogType'.
-initLogger :: IPAddrSource -> LogType -> IO FormattedTime
-           -> IO ApacheLoggerActions
-initLogger ipsrc typ tgetter = do
+initLoggerUser :: ToLogStr user => Maybe (Request -> Maybe user) -> IPAddrSource -> LogType -> IO FormattedTime
+               -> IO ApacheLoggerActions
+initLoggerUser ugetter ipsrc typ tgetter = do
     (fl, cleanUp) <- newFastLogger typ
     return $ ApacheLoggerActions {
-        apacheLogger     = apache fl ipsrc tgetter
-      , serverpushLogger = serverpush fl ipsrc tgetter
+        apacheLogger     = apache fl ipsrc ugetter tgetter
+      , serverpushLogger = serverpush fl ipsrc ugetter tgetter
       , logRotator       = return ()
       , logRemover       = cleanUp
       }
 
+initLogger :: IPAddrSource -> LogType -> IO FormattedTime
+           -> IO ApacheLoggerActions
+initLogger = initLoggerUser nouser
+  where
+    nouser :: Maybe (Request -> Maybe ByteString)
+    nouser = Nothing
+
 --- | Checking if a log file can be written if 'LogType' is 'LogFileNoRotate' or 'LogFile'.
 logCheck :: LogType -> IO ()
 logCheck LogNone          = return ()
@@ -135,15 +143,15 @@
 
 ----------------------------------------------------------------
 
-apache :: (LogStr -> IO ()) -> IPAddrSource -> IO FormattedTime -> ApacheLogger
-apache cb ipsrc dateget req st mlen = do
+apache :: ToLogStr user => (LogStr -> IO ()) -> IPAddrSource -> Maybe (Request -> Maybe user) -> IO FormattedTime -> ApacheLogger
+apache cb ipsrc userget dateget req st mlen = do
     zdata <- dateget
-    cb (apacheLogStr ipsrc zdata req st mlen)
+    cb (apacheLogStr ipsrc (justGetUser userget) zdata req st mlen)
 
-serverpush :: (LogStr -> IO ()) -> IPAddrSource -> IO FormattedTime -> ServerPushLogger
-serverpush cb ipsrc dateget req path size = do
+serverpush :: ToLogStr user => (LogStr -> IO ()) -> IPAddrSource -> Maybe (Request -> Maybe user) -> IO FormattedTime -> ServerPushLogger
+serverpush cb ipsrc userget dateget req path size = do
     zdata <- dateget
-    cb (serverpushLogStr ipsrc zdata req path size)
+    cb (serverpushLogStr ipsrc (justGetUser userget) zdata req path size)
 
 ---------------------------------------------------------------
 
@@ -167,3 +175,7 @@
 clockDateCacher = do
     tgetter <- newTimeCache simpleTimeFormat
     return (tgetter, return ())
+
+justGetUser :: Maybe (Request -> Maybe user) -> (Request -> Maybe user)
+justGetUser (Just getter) = getter
+justGetUser Nothing       = \_ -> Nothing
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
@@ -41,10 +41,12 @@
   | FromFallback
 
 -- | Apache style log format.
-apacheLogStr :: IPAddrSource -> FormattedTime -> Request -> Status -> Maybe Integer -> LogStr
-apacheLogStr ipsrc tmstr req status msize =
+apacheLogStr :: ToLogStr user => IPAddrSource -> (Request -> Maybe user) -> FormattedTime -> Request -> Status -> Maybe Integer -> LogStr
+apacheLogStr ipsrc userget tmstr req status msize =
       toLogStr (getSourceIP ipsrc req)
-  <> " - - ["
+  <> " - "
+  <> maybe "-" toLogStr (userget req)
+  <> " ["
   <> toLogStr tmstr
   <> "] \""
   <> toLogStr (requestMethod req)
@@ -75,10 +77,12 @@
 #endif
 
 -- | HTTP/2 Push log format in the Apache style.
-serverpushLogStr :: IPAddrSource -> FormattedTime -> Request -> ByteString -> Integer -> LogStr
-serverpushLogStr ipsrc tmstr req path size =
+serverpushLogStr :: ToLogStr user => IPAddrSource -> (Request -> Maybe user) -> FormattedTime -> Request -> ByteString -> Integer -> LogStr
+serverpushLogStr ipsrc userget tmstr req path size =
       toLogStr (getSourceIP ipsrc req)
-  <> " - - ["
+  <> " - "
+  <> maybe "-" toLogStr (userget req)
+  <> " ["
   <> toLogStr tmstr
   <> "] \"PUSH "
   <> toLogStr path
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.3.6
+Version:                2.3.7
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
