diff --git a/benchmark/Main.hs b/benchmark/Main.hs
new file mode 100644
--- /dev/null
+++ b/benchmark/Main.hs
@@ -0,0 +1,12 @@
+module Main where
+
+import Polysemy.Conc (runConc)
+import Polysemy.Log.Data.Severity (Severity (Error))
+import qualified Polysemy.Log.Effect.Log as Log
+import Polysemy.Log.Stdout (interpretLogStdoutLevelConc)
+
+main :: IO ()
+main =
+  runConc $ interpretLogStdoutLevelConc (Just Error) do
+    for_ @[] [1..50000] \ (i :: Int) ->
+      Log.warn ("line " <> show i)
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,7 @@
 # Unreleased
 
+# 0.7.1.0
+
 * Add parser for `Severity`.
 * Export `interpretDataLog`.
 * Export `local`.
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
@@ -5,7 +5,6 @@
 import qualified Polysemy.Conc as Conc
 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.Time (Seconds (Seconds))
 
@@ -40,20 +39,20 @@
 {-# inline interceptDataLogConcWith #-}
 
 -- |Part of 'interceptDataLogConc'.
--- Loop as long as the proided queue is open and relay all dequeued messages to the ultimate interpreter, thereby
+-- Loop as long as the provided queue is open and relay all dequeued messages to the ultimate interpreter, thereby
 -- forcing the logging implementation to work in this thread.
 loggerThread ::
   ∀ msg r .
   Members [Queue msg, DataLog msg] r =>
   Sem r ()
-loggerThread = do
+loggerThread =
   spin
   where
     spin = do
-      next <- Queue.read
-      for_ (resultToMaybe next) \ msg -> do
+      next <- Queue.readMaybe
+      for_ next \ msg -> do
         DataLog.dataLog @msg msg
-        spin
+      when (isJust next) spin
 
 -- |Close the concurrent logger's queue and wait for one second to allow it to process any messages that have been
 -- queued.
diff --git a/polysemy-log.cabal b/polysemy-log.cabal
--- a/polysemy-log.cabal
+++ b/polysemy-log.cabal
@@ -1,11 +1,11 @@
 cabal-version: 2.2
 
--- This file has been generated from package.yaml by hpack version 0.34.6.
+-- This file has been generated from package.yaml by hpack version 0.34.7.
 --
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-log
-version:        0.7.1.0
+version:        0.7.2.0
 synopsis:       Polysemy effects for logging
 description:    See https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html
 category:       Logging
@@ -66,6 +66,7 @@
       DisambiguateRecordFields
       DoAndIfThenElse
       DuplicateRecordFields
+      EmptyCase
       EmptyDataDecls
       ExistentialQuantification
       FlexibleContexts
@@ -80,8 +81,9 @@
       MultiParamTypeClasses
       MultiWayIf
       NamedFieldPuns
-      OverloadedStrings
+      OverloadedLabels
       OverloadedLists
+      OverloadedStrings
       PackageImports
       PartialTypeSignatures
       PatternGuards
@@ -155,6 +157,7 @@
       DisambiguateRecordFields
       DoAndIfThenElse
       DuplicateRecordFields
+      EmptyCase
       EmptyDataDecls
       ExistentialQuantification
       FlexibleContexts
@@ -169,8 +172,9 @@
       MultiParamTypeClasses
       MultiWayIf
       NamedFieldPuns
-      OverloadedStrings
+      OverloadedLabels
       OverloadedLists
+      OverloadedStrings
       PackageImports
       PartialTypeSignatures
       PatternGuards
@@ -206,6 +210,87 @@
     , polysemy-time
     , tasty
     , time
+  mixins:
+      base hiding (Prelude)
+    , incipit-core (IncipitCore as Prelude)
+    , incipit-core hiding (IncipitCore)
+  default-language: Haskell2010
+
+benchmark space
+  type: exitcode-stdio-1.0
+  main-is: Main.hs
+  hs-source-dirs:
+      benchmark
+  default-extensions:
+      AllowAmbiguousTypes
+      ApplicativeDo
+      BangPatterns
+      BinaryLiterals
+      BlockArguments
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveAnyClass
+      DeriveDataTypeable
+      DeriveFoldable
+      DeriveFunctor
+      DeriveGeneric
+      DeriveLift
+      DeriveTraversable
+      DerivingStrategies
+      DerivingVia
+      DisambiguateRecordFields
+      DoAndIfThenElse
+      DuplicateRecordFields
+      EmptyCase
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      KindSignatures
+      LambdaCase
+      LiberalTypeSynonyms
+      MultiParamTypeClasses
+      MultiWayIf
+      NamedFieldPuns
+      OverloadedLabels
+      OverloadedLists
+      OverloadedStrings
+      PackageImports
+      PartialTypeSignatures
+      PatternGuards
+      PatternSynonyms
+      PolyKinds
+      QuantifiedConstraints
+      QuasiQuotes
+      RankNTypes
+      RecordWildCards
+      RecursiveDo
+      RoleAnnotations
+      ScopedTypeVariables
+      StandaloneDeriving
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+      TypeFamilyDependencies
+      TypeOperators
+      TypeSynonymInstances
+      UndecidableInstances
+      UnicodeSyntax
+      ViewPatterns
+  ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages -threaded -rtsopts -with-rtsopts=-N
+  build-depends:
+      base >=4.12 && <5
+    , incipit-core >=0.3
+    , polysemy
+    , polysemy-conc
+    , polysemy-log
+    , polysemy-plugin
   mixins:
       base hiding (Prelude)
     , incipit-core (IncipitCore as Prelude)
