diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# log-base-0.7.4.0 (2017-10-27)
+* Add `mkBulkLogger'` ([#40](https://github.com/scrive/log/pull/40).
+
 # log-base-0.7.3.0 (2017-10-10)
 * `BasicStdOutLogger` now flushes stdout on each write. `BulkStdOutLogger`
   now flushes stdout on each bulk write ([#38](https://github.com/scrive/log/issues/38)).
diff --git a/log-base.cabal b/log-base.cabal
--- a/log-base.cabal
+++ b/log-base.cabal
@@ -1,5 +1,5 @@
 name:                log-base
-version:             0.7.3.0
+version:             0.7.4.0
 synopsis:            Structured logging solution (base package)
 
 description:         A library that provides a way to record structured log
diff --git a/src/Log/Logger.hs b/src/Log/Logger.hs
--- a/src/Log/Logger.hs
+++ b/src/Log/Logger.hs
@@ -3,6 +3,7 @@
     Logger
   , mkLogger
   , mkBulkLogger
+  , mkBulkLogger'
   , execLogger
   , waitForLogger
   , shutdownLogger
@@ -76,9 +77,19 @@
 --    -- in the presence of exceptions in the child thread.
 -- @
 mkBulkLogger :: T.Text -> ([LogMessage] -> IO ()) -> IO () -> IO Logger
-mkBulkLogger = mkLoggerImpl
-  (newSBQueueIO sbDefaultCapacity) isEmptySBQueue readSBQueue writeSBQueue
-  (threadDelay 1000000)
+mkBulkLogger = mkBulkLogger' sbDefaultCapacity 1000000
+
+-- | Like 'mkBulkLogger', but with configurable queue size and thread delay.
+mkBulkLogger'
+    :: Int                      -- ^ queue capacity (default 1000000)
+    -> Int                      -- ^ thread delay (microseconds, default 1000000)
+    -> T.Text                   -- ^ logger name
+    -> ([LogMessage] -> IO ())  -- ^ write
+    -> IO ()                    -- ^ flush
+    -> IO Logger
+mkBulkLogger' cap dur = mkLoggerImpl
+  (newSBQueueIO cap) isEmptySBQueue readSBQueue writeSBQueue
+  (threadDelay dur)
 
 ----------------------------------------
 
