diff --git a/lib/Polysemy/Log/Conc.hs b/lib/Polysemy/Log/Conc.hs
--- a/lib/Polysemy/Log/Conc.hs
+++ b/lib/Polysemy/Log/Conc.hs
@@ -2,15 +2,18 @@
 module Polysemy.Log.Conc where
 
 import Polysemy (interceptH, runT, subsume)
-import Polysemy.Async (Async, async)
+import Polysemy.Async (Async, async, await)
 import Polysemy.Conc (Queue, Race, interpretQueueTBM)
 import qualified Polysemy.Conc.Queue as Queue
 import Polysemy.Conc.Queue.Result (resultToMaybe)
 import Polysemy.Internal.Tactics (liftT)
-import Polysemy.Resource (Resource)
+import Polysemy.Resource (Resource, finally)
 
 import qualified Polysemy.Log.Data.DataLog as DataLog
 import Polysemy.Log.Data.DataLog (DataLog (DataLog, Local))
+import qualified Control.Concurrent.Async as Base
+import qualified Polysemy.Conc as Conc
+import Polysemy.Time (Seconds(Seconds))
 
 -- |Intercept 'DataLog' for concurrent processing.
 -- This does not send any action to the ultimate interpreter but writes all log messages to the provided queue.
@@ -55,6 +58,18 @@
         DataLog.dataLog @msg msg
         spin
 
+-- |Close the concurrent logger's queue and wait for one second to allow it to process any messages that have been
+-- queued.
+finalize ::
+  ∀ msg r .
+  Members [Queue msg, Resource, Async, Race, Embed IO] r =>
+  Base.Async (Maybe ()) ->
+  Sem r ()
+finalize handle =
+  Conc.timeoutU (Seconds 1) do
+    Queue.close @msg
+    void (await handle)
+
 -- |Intercept 'DataLog' for concurrent processing.
 -- Creates a queue and starts a worker thread.
 -- All log messages received by the interceptor in 'interceptDataLogConcWithLocal' are written to the queue and sent to
@@ -74,6 +89,6 @@
   Sem r a
 interceptDataLogConc maxQueued sem = do
   interpretQueueTBM @msg maxQueued do
-    !_ <- async (loggerThread @msg)
-    interceptDataLogConcWith @msg (raise sem)
+    !handle <- async (loggerThread @msg)
+    finally (interceptDataLogConcWith @msg (raise sem)) (finalize @msg handle)
 {-# inline interceptDataLogConc #-}
diff --git a/polysemy-log.cabal b/polysemy-log.cabal
--- a/polysemy-log.cabal
+++ b/polysemy-log.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-log
-version:        0.4.0.0
+version:        0.4.1.0
 synopsis:       Polysemy Effects for Logging
 description:    See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html>
 category:       Logging
@@ -111,6 +111,7 @@
   ghc-options: -Wall -Wredundant-constraints -Wunused-packages -Widentities
   build-depends:
       ansi-terminal >=0.10.3
+    , async
     , base ==4.*
     , polysemy >=1.5
     , polysemy-conc >=0.3
