diff --git a/Blammo.cabal b/Blammo.cabal
--- a/Blammo.cabal
+++ b/Blammo.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            Blammo
-version:         1.0.3.0
+version:         1.1.0.0
 license:         MIT
 license-file:    LICENSE
 maintainer:      Freckle Education
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,9 @@
-## [_Unreleased_](https://github.com/freckle/blammo/compare/v1.0.3.0...main)
+## [_Unreleased_](https://github.com/freckle/blammo/compare/v1.1.0.0...main)
+
+## [v1.1.0.0](https://github.com/freckle/blammo/compare/v1.0.3.0...v1.1.0.0)
+
+- Add `flushLogger`
+- Ensure log is flushed even on exceptions.
 
 ## [v1.0.3.0](https://github.com/freckle/blammo/compare/v1.0.2.3...v1.0.3.0)
 
diff --git a/src/Blammo/Logging.hs b/src/Blammo/Logging.hs
--- a/src/Blammo/Logging.hs
+++ b/src/Blammo/Logging.hs
@@ -56,18 +56,19 @@
 import Blammo.Logging.Logger
 import Control.Lens ((^.))
 import Control.Monad.Catch (MonadMask)
-import Control.Monad.IO.Class (MonadIO(..))
+import Control.Monad.IO.Unlift (MonadUnliftIO)
 import Control.Monad.Logger.Aeson
 import Data.Aeson (Series)
 import Data.Aeson.Types (Pair)
 import Data.ByteString (ByteString)
+import UnliftIO.Exception (finally)
 
-runLoggerLoggingT :: (MonadIO m, HasLogger env) => env -> LoggingT m a -> m a
-runLoggerLoggingT env f = do
-  a <- runLoggingT
+runLoggerLoggingT
+  :: (MonadUnliftIO m, HasLogger env) => env -> LoggingT m a -> m a
+runLoggerLoggingT env f = (`finally` flushLogStr logger) $ do
+  runLoggingT
     (filterLogger (getLoggerShouldLog logger) f)
     (loggerOutput logger $ getLoggerReformat logger)
-  a <$ flushLogStr logger
   where logger = env ^. loggerL
 
 loggerOutput
diff --git a/src/Blammo/Logging/Logger.hs b/src/Blammo/Logging/Logger.hs
--- a/src/Blammo/Logging/Logger.hs
+++ b/src/Blammo/Logging/Logger.hs
@@ -2,6 +2,7 @@
   ( Logger
   , HasLogger(..)
   , newLogger
+  , flushLogger
   , getLoggerReformat
   , getLoggerShouldLog
   , pushLogStrLn
@@ -13,9 +14,6 @@
   , getLoggedMessages
   , getLoggedMessagesLenient
   , getLoggedMessagesUnsafe
-
-  -- * Deprecated
-  , getLoggerLoggerSet
   ) where
 
 import Prelude
@@ -53,7 +51,6 @@
 
 getLoggerLoggerSet :: Logger -> LoggerSet
 getLoggerLoggerSet = lLoggerSet
-{-# DEPRECATED getLoggerLoggerSet "Internal function, will be removed in a future version" #-}
 
 getLoggerReformat :: Logger -> LogLevel -> ByteString -> ByteString
 getLoggerReformat = lReformat
@@ -104,6 +101,11 @@
     lLoggedMessages = Nothing
 
   pure $ Logger { .. }
+
+flushLogger :: (MonadIO m, MonadReader env m, HasLogger env) => m ()
+flushLogger = do
+  logger <- view loggerL
+  flushLogStr logger
 
 -- | Create a 'Logger' that will capture log messages instead of logging them
 --
diff --git a/src/Blammo/Logging/Simple.hs b/src/Blammo/Logging/Simple.hs
--- a/src/Blammo/Logging/Simple.hs
+++ b/src/Blammo/Logging/Simple.hs
@@ -10,13 +10,14 @@
 import Blammo.Logging
 import qualified Blammo.Logging.LogSettings.Env as Env
 import Control.Monad.IO.Class (MonadIO(..))
+import Control.Monad.IO.Unlift (MonadUnliftIO)
 
 -- | Construct a 'Logger' configured via environment variables
 newLoggerEnv :: MonadIO m => m Logger
 newLoggerEnv = liftIO $ newLogger =<< Env.parse
 
 -- | Construct a 'Logger' configured via environment variables and use it
-runSimpleLoggingT :: MonadIO m => LoggingT m a -> m a
+runSimpleLoggingT :: MonadUnliftIO m => LoggingT m a -> m a
 runSimpleLoggingT f = do
   logger <- newLoggerEnv
   runLoggerLoggingT logger f
