diff --git a/System/Log/FastLogger/Logger.hs b/System/Log/FastLogger/Logger.hs
--- a/System/Log/FastLogger/Logger.hs
+++ b/System/Log/FastLogger/Logger.hs
@@ -19,6 +19,8 @@
 
 data Logger = Logger (MVar Buffer) !BufSize (IORef LogStr)
 
+----------------------------------------------------------------
+
 newLogger :: BufSize -> IO Logger
 newLogger size = do
     buf <- getBuffer size
@@ -26,21 +28,25 @@
     lref <- newIORef mempty
     return $ Logger mbuf size lref
 
+----------------------------------------------------------------
+
 pushLog :: FD -> Logger -> LogStr -> IO ()
 pushLog fd logger@(Logger mbuf size ref) nlogmsg@(LogStr nlen nbuilder)
   | nlen > size = do
       flushLog fd logger
       withMVar mbuf $ \buf -> toBufIOWith buf nlen (write fd) nbuilder
   | otherwise = do
-    needFlush <- atomicModifyIORef' ref checkBuf
-    when needFlush $ do
-        flushLog fd logger
-        pushLog fd logger nlogmsg
+    mmsg <- atomicModifyIORef' ref checkBuf
+    case mmsg of
+        Nothing  -> return ()
+        Just msg -> withMVar mbuf $ \buf -> writeLogStr fd buf size msg
   where
     checkBuf ologmsg@(LogStr olen _)
-      | size < olen + nlen = (ologmsg, True)
-      | otherwise          = (ologmsg <> nlogmsg, False)
+      | size < olen + nlen = (nlogmsg, Just ologmsg)
+      | otherwise          = (ologmsg <> nlogmsg, Nothing)
 
+----------------------------------------------------------------
+
 flushLog :: FD -> Logger -> IO ()
 flushLog fd (Logger mbuf size lref) = do
     logmsg <- atomicModifyIORef' lref (\old -> (mempty, old))
@@ -73,4 +79,3 @@
         written <- writeRawBufferPtr "write" fd bf 0 (fromIntegral len)
         when (written < len) $
             loop (bf `plusPtr` fromIntegral written) (len - written)
-
diff --git a/fast-logger.cabal b/fast-logger.cabal
--- a/fast-logger.cabal
+++ b/fast-logger.cabal
@@ -1,5 +1,5 @@
 Name:                   fast-logger
-Version:                2.1.0
+Version:                2.1.1
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -35,6 +35,7 @@
     Ghc-Options:     -Wall -threaded
     Build-Depends:   base >= 4 && < 5
                    , bytestring
+                   , directory
                    , fast-logger
                    , hspec
 
