diff --git a/Control/Monad/Logger/Syslog.hs b/Control/Monad/Logger/Syslog.hs
--- a/Control/Monad/Logger/Syslog.hs
+++ b/Control/Monad/Logger/Syslog.hs
@@ -8,14 +8,16 @@
 Portability : POSIX
 
 Example:
-```
+
+@
 import Control.Monad.Logger ( logDebugN  )
 import Control.Monad.Logger.Syslog ( runSyslogLoggingT )
 
 main :: IO ()
 main = runSyslogLoggingT (logDebugN "HELLO!")
-```
-|-}
+@
+
+-}
 module Control.Monad.Logger.Syslog
        ( module System.Log.MonadLogger.Syslog )
        where
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,8 +9,10 @@
 
 ## Usage (example)
 
-    import Control.Monad.Logger ( logDebugN  )
-    import Control.Monad.Logger.Syslog ( runSyslogLoggingT )
+```haskell
+import Control.Monad.Logger ( logDebugN  )
+import Control.Monad.Logger.Syslog ( runSyslogLoggingT )
 
-    main :: IO ()
-    main = runSyslogLoggingT (logDebugN "HELLO!")
+main :: IO ()
+main = runSyslogLoggingT (logDebugN "HELLO!")
+```
diff --git a/System/Log/MonadLogger/Syslog.hs b/System/Log/MonadLogger/Syslog.hs
--- a/System/Log/MonadLogger/Syslog.hs
+++ b/System/Log/MonadLogger/Syslog.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module System.Log.MonadLogger.Syslog
@@ -8,31 +9,49 @@
        )
        where
 
-import Control.Monad.IO.Class (MonadIO ())
 import Control.Monad.Logger
 import System.Posix.Syslog
 import Data.Text (unpack)
 import System.Log.FastLogger (fromLogStr)
+#if MIN_VERSION_hsyslog(4,0,0)
+#else
 import qualified Data.ByteString.Char8 as BS8
+#endif
 
-runSyslogLoggingT :: MonadIO m => LoggingT m a -> m a
+-- | Runs a 'LoggingT', sending its output to the syslog.  The logs
+-- are formatted the same as 'runStdoutLoggingT', but the 'LogLevel'
+-- is converted to a syslog priority value (but still included in the
+-- log message).
+runSyslogLoggingT :: LoggingT m a -> m a
 runSyslogLoggingT = (`runLoggingT` syslogOutput)
 
--- TODO: useSyslog allows giving a source name and should be more efficient
--- But it assumes IO
--- Perhaps should use mmorph to generalize IO to MonadIO
+-- TODO: useSyslog allows giving a source name and should be more
+-- efficient But it assumes IO.  Perhaps MonadBaseControl should be
+-- used to generalize it.
+--
+-- Note that this probably shouldn't be the default implementation,
+-- because these settings are process-wide:
+-- https://hackage.haskell.org/package/hsyslog-2.0/docs/System-Posix-Syslog.html#v:withSyslog
+--
+-- So, concurrent use of this would step on eachother.
 {-
 runSyslogLoggingT :: MonadIO m => String -> LoggingT m a -> m a
 runSyslogLoggingT source action =
   useSyslog source (runLoggingT action defaultSyslogOutput)
 -}
 
+-- | Same as 'defaultSyslogOutput'.
 syslogOutput :: Loc -> LogSource -> LogLevel -> LogStr -> IO ()
 syslogOutput = defaultSyslogOutput
 
+-- | This invokes 'formattedSyslogOutput' with 'defaultLogStr'.  This
+-- means that the resulting log messages are the same as the default
+-- format used by "Control.Monad.Logger".
 defaultSyslogOutput :: Loc -> LogSource -> LogLevel -> LogStr -> IO ()
 defaultSyslogOutput = formattedSyslogOutput defaultLogStr
 
+-- | Given a "Control.Monad.Logger" log formatter, this writes the log
+-- to the syslog,
 formattedSyslogOutput :: (Loc -> LogSource -> LogLevel -> LogStr -> LogStr)
                       -> Loc
                       -> LogSource
@@ -40,8 +59,16 @@
                       -> LogStr
                       -> IO ()
 formattedSyslogOutput f l s level msg =
-  syslog (levelToPriority level)
-         (BS8.unpack (fromLogStr (f l s level msg)))
+#if MIN_VERSION_hsyslog(4,0,0)
+    withSyslog undefined $ \syslog ->
+        syslog USER
+            (levelToPriority level)
+            (fromLogStr $ f l s level msg)
+#else
+    syslog
+        (levelToPriority level)
+        (BS8.unpack $ fromLogStr $ f l s level msg)
+#endif
 
 levelToPriority :: LogLevel -> Priority
 levelToPriority LevelDebug = Debug
diff --git a/monad-logger-syslog.cabal b/monad-logger-syslog.cabal
--- a/monad-logger-syslog.cabal
+++ b/monad-logger-syslog.cabal
@@ -1,5 +1,5 @@
 name:                monad-logger-syslog
-version:             0.1.1.1
+version:             0.1.2.0
 synopsis:            syslog output for monad-logger
 description:         syslog output for monad-logger
 homepage:            https://github.com/fpco/monad-logger-syslog
@@ -21,7 +21,7 @@
   exposed-modules:     Control.Monad.Logger.Syslog
                        System.Log.MonadLogger.Syslog
   ghc-options:        -Wall
-  build-depends:       base >=4.6 && <5
+  build-depends:       base >=4.7 && <5
                      , bytestring
                      , fast-logger
                      , hsyslog
