diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/freckle-app-v1.19.0.0...main)
+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/freckle-app-v1.20.0.1...main)
 
-## [v1.12.0.0](https://github.com/freckle/freckle-app/compare/freckle-app-v1.19.0.0...freckle-app-v1.20.0.0)
+## [v1.20.0.1](https://github.com/freckle/freckle-app/compare/freckle-app-v1.20.0.0...freckle-app-v1.20.0.1)
+
+- Upgrade `Blammo` to 2.1
+
+## [v1.20.0.0](https://github.com/freckle/freckle-app/compare/freckle-app-v1.19.0.0...freckle-app-v1.20.0.0)
 
 Changes affecting users:
 
diff --git a/freckle-app.cabal b/freckle-app.cabal
--- a/freckle-app.cabal
+++ b/freckle-app.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.22
 name:               freckle-app
-version:            1.20.0.0
+version:            1.20.0.1
 license:            MIT
 license-file:       LICENSE
 maintainer:         Freckle Education
@@ -89,8 +89,8 @@
         -Wno-safe -Wno-unsafe
 
     build-depends:
-        Blammo >=2.0.0.0,
-        Blammo-wai >=0.0.0.0,
+        Blammo >=2.1.0.0,
+        Blammo-wai >=0.0.0.2,
         Glob >=0.10.2,
         MonadRandom >=0.5.3,
         QuickCheck >=2.14.3,
@@ -116,7 +116,7 @@
         faktory >=1.1.2.4,
         freckle-env >=0.0.1.1,
         freckle-http >=0.0.0.0,
-        freckle-otel >=0.0.0.1,
+        freckle-otel >=0.0.0.2,
         hashable >=1.4.2.0,
         hs-opentelemetry-api >=0.1.0.0,
         hs-opentelemetry-instrumentation-persistent >=0.1.0.0,
@@ -224,7 +224,7 @@
         -Wno-safe -Wno-unsafe -threaded -rtsopts -with-rtsopts=-N
 
     build-depends:
-        Blammo >=2.0.0.0,
+        Blammo >=2.1.0.0,
         QuickCheck >=2.14.3,
         aeson >=2.0.3.0,
         async >=2.2.4,
diff --git a/library/Freckle/App.hs b/library/Freckle/App.hs
--- a/library/Freckle/App.hs
+++ b/library/Freckle/App.hs
@@ -181,7 +181,9 @@
 
 import Freckle.App.Prelude
 
-import Blammo.Logging
+import Blammo.Logging (MonadLogger, MonadLoggerIO)
+import Blammo.Logging.Setup (WithLogger (..))
+import Blammo.Logging.ThreadContext (MonadMask)
 import Control.Lens (view)
 import Control.Monad.Catch (MonadCatch, MonadThrow)
 import Control.Monad.Primitive (PrimMonad (..))
diff --git a/library/Freckle/App/Async.hs b/library/Freckle/App/Async.hs
--- a/library/Freckle/App/Async.hs
+++ b/library/Freckle/App/Async.hs
@@ -10,8 +10,9 @@
 
 import Freckle.App.Prelude
 
-import Blammo.Logging (Message (..), MonadLogger, MonadMask, logError, (.=))
-import Blammo.Logging qualified as Blammo
+import Blammo.Logging (Message (..), MonadLogger, logError, (.=))
+import Blammo.Logging.ThreadContext (MonadMask)
+import Blammo.Logging.ThreadContext qualified as Blammo
 import Control.Immortal qualified as Immortal
 import Control.Monad (forever)
 import Data.Aeson (Value)
diff --git a/library/Freckle/App/Bugsnag/MetaData.hs b/library/Freckle/App/Bugsnag/MetaData.hs
--- a/library/Freckle/App/Bugsnag/MetaData.hs
+++ b/library/Freckle/App/Bugsnag/MetaData.hs
@@ -15,7 +15,7 @@
 
 import Freckle.App.Prelude
 
-import Blammo.Logging (myThreadContext)
+import Blammo.Logging.ThreadContext (myThreadContext)
 import Control.Lens (Lens', lens, to, view, (<>~))
 import Data.Aeson (Value (..))
 import Data.Aeson.KeyMap qualified as KeyMap
diff --git a/library/Freckle/App/Stats.hs b/library/Freckle/App/Stats.hs
--- a/library/Freckle/App/Stats.hs
+++ b/library/Freckle/App/Stats.hs
@@ -36,7 +36,7 @@
 
 import Freckle.App.Prelude
 
-import Blammo.Logging
+import Blammo.Logging.ThreadContext (MonadMask, withThreadContext)
 import Control.Lens (Lens', lens, to, view, (&), (.~), (<>~))
 import Control.Monad.Except (runExceptT)
 import Control.Monad.Reader (local)
diff --git a/library/Freckle/App/Test.hs b/library/Freckle/App/Test.hs
--- a/library/Freckle/App/Test.hs
+++ b/library/Freckle/App/Test.hs
@@ -33,7 +33,9 @@
   )
 import Test.Hspec.Expectations.Lifted as X hiding (expectationFailure)
 
-import Blammo.Logging
+import Blammo.Logging (MonadLogger, MonadLoggerIO)
+import Blammo.Logging.Setup (WithLogger (..))
+import Blammo.Logging.ThreadContext (MonadMask)
 import Control.Lens (view)
 import Control.Monad.Base
 import Control.Monad.Catch (ExitCase (..), MonadCatch, MonadThrow, mask)
diff --git a/library/Freckle/App/Test/Yesod.hs b/library/Freckle/App/Test/Yesod.hs
--- a/library/Freckle/App/Test/Yesod.hs
+++ b/library/Freckle/App/Test/Yesod.hs
@@ -73,7 +73,7 @@
 
 import Freckle.App.Prelude
 
-import Blammo.Logging (LoggingT)
+import Blammo.Logging.Setup (LoggingT)
 import Control.Monad.Except (ExceptT)
 import Control.Monad.State (StateT)
 import Control.Monad.Trans.Maybe (MaybeT)
diff --git a/library/Network/Wai/Middleware/Stats.hs b/library/Network/Wai/Middleware/Stats.hs
--- a/library/Network/Wai/Middleware/Stats.hs
+++ b/library/Network/Wai/Middleware/Stats.hs
@@ -5,7 +5,7 @@
 
 import Freckle.App.Prelude
 
-import Blammo.Logging (Pair, withThreadContext)
+import Blammo.Logging.ThreadContext (Pair, withThreadContext)
 import Control.Lens ((^.))
 import Control.Monad.Reader (runReaderT)
 import Data.Aeson ((.=))
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: freckle-app
-version: 1.20.0.0
+version: 1.20.0.1
 maintainer: Freckle Education
 category: Utils
 github: freckle/freckle-app
@@ -69,7 +69,7 @@
     - Freckle.App.Test.Http
     - Freckle.App.Test.Http.MatchRequest
   dependencies:
-    - Blammo >= 2.0.0.0
+    - Blammo
     - Blammo-wai
     - Glob
     - MonadRandom
diff --git a/tests/Freckle/App/AsyncSpec.hs b/tests/Freckle/App/AsyncSpec.hs
--- a/tests/Freckle/App/AsyncSpec.hs
+++ b/tests/Freckle/App/AsyncSpec.hs
@@ -5,7 +5,7 @@
 import Freckle.App.Prelude
 
 import Blammo.Logging
-import Blammo.Logging qualified as Blammo
+import Blammo.Logging.ThreadContext qualified as Blammo
 import Control.Concurrent.Async (wait)
 import Data.Aeson.KeyMap qualified as KeyMap
 import Freckle.App.Async (async)
diff --git a/tests/Freckle/App/Bugsnag/MetaDataSpec.hs b/tests/Freckle/App/Bugsnag/MetaDataSpec.hs
--- a/tests/Freckle/App/Bugsnag/MetaDataSpec.hs
+++ b/tests/Freckle/App/Bugsnag/MetaDataSpec.hs
@@ -4,7 +4,7 @@
 
 import Freckle.App.Test
 
-import Blammo.Logging
+import Blammo.Logging.ThreadContext qualified as Blammo
 import Data.Aeson
 import Data.Bugsnag
 import Freckle.App.Bugsnag
@@ -20,7 +20,7 @@
 
       withStatsClient settings $ \client -> flip runReaderT client $ do
         Stats.tagged [("baz", "bat")] $ do
-          withThreadContext ["quix" .= ("quip" :: Text)] $ do
+          Blammo.withThreadContext ["quix" .= ("quip" :: Text)] $ do
             collected <- collectMetaData
 
             let expected =
