diff --git a/Benchmark.hs b/Benchmark.hs
--- a/Benchmark.hs
+++ b/Benchmark.hs
@@ -6,11 +6,12 @@
 import Criterion.Main
 import qualified Control.Monad.Log as LoggingEffect
 import qualified Control.Monad.Logger as MonadLogger
-import qualified Data.ByteString as BS
+import qualified Data.ByteString.Char8 as BS
 import System.Log.FastLogger (fromLogStr, toLogStr)
 import Data.Monoid ((<>))
 import qualified Data.Text.IO as T
-import qualified Text.PrettyPrint.Leijen.Text as PP
+import qualified Data.Text.Prettyprint.Doc as PP
+import qualified Data.Text.Prettyprint.Doc.Render.Text as PP
 import System.IO (stdout)
 import Control.Concurrent.Async.Lifted
 import Data.Foldable (sequenceA_)
@@ -33,9 +34,9 @@
                    , bgroup "discard-logs" [ bench "logging-effect" (nfIO (LoggingEffect.discardLogging loggingEffectLog))
                                            , bench "monad-logger" (nfIO (MonadLogger.runNoLoggingT monadLoggerLog))]]
 
-loggingEffectStdoutHandler = PP.putDoc . (<> PP.linebreak) . LoggingEffect.renderWithSeverity id
+loggingEffectStdoutHandler = PP.putDoc . (<> PP.line') . LoggingEffect.renderWithSeverity id
 
-loggingEffectLog :: LoggingEffect.MonadLog (LoggingEffect.WithSeverity PP.Doc) m => m ()
+loggingEffectLog :: LoggingEffect.MonadLog (LoggingEffect.WithSeverity (PP.Doc ann)) m => m ()
 loggingEffectLog = LoggingEffect.logMessage (LoggingEffect.WithSeverity LoggingEffect.Debug "Log message")
 
 monadLoggerLog :: MonadLogger.MonadLogger m => m ()
diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,9 @@
+## 1.3.1
+
+* Add `MonadUnliftIO` instance for `LoggingT`.
+
+---
+
 # 1.3.0
 
 ## Major Changes
diff --git a/logging-effect.cabal b/logging-effect.cabal
--- a/logging-effect.cabal
+++ b/logging-effect.cabal
@@ -1,5 +1,5 @@
 name: logging-effect
-version: 1.3.0
+version: 1.3.1
 synopsis: A mtl-style monad transformer for general purpose & compositional logging
 homepage: https://github.com/ocharles/logging-effect
 license: BSD3
@@ -27,6 +27,7 @@
                      , monad-control >= 1.0.0.4 && < 1.1
                      , transformers-base >= 0.4.4 && < 0.5
                      , semigroups >= 0.16.2.2 && < 0.19
+                     , unliftio-core >= 0.1.1.0 && < 0.2
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options: -O2 -Wall
@@ -34,6 +35,6 @@
 Benchmark benchmark-logging-effect
   type: exitcode-stdio-1.0
   main-is: Benchmark.hs
-  build-depends: base, logging-effect, criterion, monad-logger, fast-logger, text, bytestring, wl-pprint-text, lifted-async, time
+  build-depends: base, logging-effect, criterion, monad-logger, fast-logger, text, bytestring, prettyprinter, lifted-async, time
   ghc-options: -O2
   default-language:    Haskell2010
diff --git a/src/Control/Monad/Log.hs b/src/Control/Monad/Log.hs
--- a/src/Control/Monad/Log.hs
+++ b/src/Control/Monad/Log.hs
@@ -83,6 +83,7 @@
 import Control.Monad.Fix
 import Control.Monad.Free.Class (MonadFree(..))
 import Control.Monad.IO.Class (MonadIO, liftIO)
+import Control.Monad.IO.Unlift (MonadUnliftIO(..), UnliftIO(..), withUnliftIO)
 import Control.Monad.RWS.Class (MonadRWS)
 import Control.Monad.Reader.Class (MonadReader(..))
 import Control.Monad.State.Class (MonadState(..))
@@ -379,6 +380,12 @@
                               runInBase (\(LoggingT (ReaderT m)) ->
                                            runInReader (m handler)))))
   restoreM st = LoggingT (ReaderT (\_ -> restoreM st))
+
+instance MonadUnliftIO m => MonadUnliftIO (LoggingT msg m) where
+  askUnliftIO =
+    LoggingT . ReaderT $ \h ->
+      withUnliftIO $ \u ->
+        return (UnliftIO (unliftIO u . flip runLoggingT h))
 
 -- | Given a 'Handler' for a given @message@, interleave this 'Handler' into the
 -- underlying @m@ computation whenever 'logMessage' is called.
