diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: simple-logger
-version: 0.1.0
+version: 0.1.1
 synopsis: A very simple but efficient logging framework
 description: A very simple but efficient logging framework
 category: Logging
@@ -15,6 +15,7 @@
 
 dependencies:
   - base >= 4.9 && < 5
+  - monad-logger
 
 library:
   source-dirs: src
diff --git a/simple-logger.cabal b/simple-logger.cabal
--- a/simple-logger.cabal
+++ b/simple-logger.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: b5edd8600dd9e617fd590c0555243903dbd58f9f67496b265b3947d5e0616faf
+-- hash: ce87da47c5034f1b6490c7819839f05365997167fca44c7a7541a88fbdc6dde7
 
 name:           simple-logger
-version:        0.1.0
+version:        0.1.1
 synopsis:       A very simple but efficient logging framework
 description:    A very simple but efficient logging framework
 category:       Logging
@@ -33,6 +33,7 @@
   build-depends:
       base >=4.9 && <5
     , fast-logger
+    , monad-logger
     , mtl
     , text
   exposed-modules:
diff --git a/src/Control/Logger/Simple.hs b/src/Control/Logger/Simple.hs
--- a/src/Control/Logger/Simple.hs
+++ b/src/Control/Logger/Simple.hs
@@ -8,6 +8,7 @@
     , logFail
     , pureTrace, pureDebug, pureInfo, pureNote, pureWarn, pureError
     , showText, (<>)
+    , monadLoggerAdapter, runSimpleLoggingT
     )
 where
 
@@ -24,6 +25,7 @@
 import qualified GHC.SrcLoc as GHC
 #endif
 import qualified GHC.Stack as GHC
+import qualified Control.Monad.Logger as ML
 
 data Loggers
     = Loggers
@@ -52,32 +54,32 @@
 
 -- | Log with 'LogTrace' log level
 logTrace :: (?callStack :: GHC.CallStack) => MonadIO m => T.Text -> m ()
-logTrace = doLog LogTrace ?callStack
+logTrace = doLogCs LogTrace ?callStack . toLogStr
 
 -- | Log with 'LogDebug' log level
 logDebug :: (?callStack :: GHC.CallStack) => MonadIO m => T.Text -> m ()
-logDebug = doLog LogDebug ?callStack
+logDebug = doLogCs LogDebug ?callStack . toLogStr
 
 -- | Log with 'LogInfo' log level
 logInfo :: (?callStack :: GHC.CallStack) => MonadIO m => T.Text -> m ()
-logInfo = doLog LogInfo ?callStack
+logInfo = doLogCs LogInfo ?callStack . toLogStr
 
 -- | Log with 'LogNote' log level
 logNote :: (?callStack :: GHC.CallStack) => MonadIO m => T.Text -> m ()
-logNote = doLog LogNote ?callStack
+logNote = doLogCs LogNote ?callStack . toLogStr
 
 -- | Log with 'LogWarn' log level
 logWarn :: (?callStack :: GHC.CallStack) => MonadIO m => T.Text -> m ()
-logWarn = doLog LogWarn ?callStack
+logWarn = doLogCs LogWarn ?callStack . toLogStr
 
 -- | Log with 'LogError' log level
 logError :: (?callStack :: GHC.CallStack) => MonadIO m => T.Text -> m ()
-logError = doLog LogError ?callStack
+logError = doLogCs LogError ?callStack . toLogStr
 
 -- | Log on error level and call 'fail'
 logFail :: (?callStack :: GHC.CallStack, MonadFail m) => MonadIO m => T.Text -> m a
 logFail t =
-    do doLog LogError ?callStack t
+    do doLogCs LogError ?callStack (toLogStr t)
        fail (T.unpack t)
 
 -- | Log with 'LogTrace' level when the given expression is evaluated
@@ -106,21 +108,17 @@
 
 doPureLog ::LogLevel -> GHC.CallStack -> T.Text -> a -> a
 doPureLog ll cs txt expr =
-    unsafePerformIO (doLog ll cs txt) `seq` expr
+    unsafePerformIO (doLogCs ll cs $ toLogStr txt) `seq` expr
 
-doLog :: MonadIO m => LogLevel -> GHC.CallStack -> T.Text -> m ()
-doLog ll cs txt =
+
+doLog :: MonadIO m => LogLevel -> LogStr -> LogStr -> m ()
+doLog ll loc txt =
     liftIO $
     readIORef logLevel >>= \logLim ->
     when (ll >= logLim) $
     do lgrs <- readIORef loggers
        time <- l_timeCache lgrs
-       let loc =
-               case GHC.getCallStack cs of
-                   ((_, l):_) ->
-                       GHC.srcLocFile l <> ":" <> show (GHC.srcLocStartLine l)
-                   _ -> "unknown"
-           msg =
+       let msg =
                "[" <> renderLevel <> " "
                <> toLogStr time
                <> " "
@@ -150,6 +148,15 @@
               LogWarn -> "\o33[0;33m"
               LogError -> "\o33[1;31m"
 
+doLogCs :: MonadIO m => LogLevel -> GHC.CallStack -> LogStr -> m ()
+doLogCs ll cs txt =
+    do let loc =
+             case GHC.getCallStack cs of
+               ((_, l):_) ->
+                 GHC.srcLocFile l <> ":" <> show (GHC.srcLocStartLine l)
+               _ -> "unknown"
+       doLog ll (toLogStr loc) txt
+
 loggers :: IORef Loggers
 loggers =
     unsafePerformIO $
@@ -195,3 +202,22 @@
 
 timeFormat :: TimeFormat
 timeFormat = "%Y-%m-%d %T %z"
+
+-- | An adapter to implemend `MonadLogger` instances for custom monad stacks
+monadLoggerAdapter :: (ML.ToLogStr msg, MonadIO m) => ML.Loc -> ML.LogSource -> ML.LogLevel -> msg -> m ()
+monadLoggerAdapter loc _ lvl msg =
+  doLog level location (toLogStr msg)
+  where
+    location =
+      toLogStr $ ML.loc_filename loc <> ":" <> show (fst (ML.loc_start loc))
+    level =
+      case lvl of
+        ML.LevelDebug -> LogDebug
+        ML.LevelInfo -> LogInfo
+        ML.LevelWarn -> LogWarn
+        ML.LevelError -> LogError
+        ML.LevelOther _ -> LogTrace
+
+-- | Runs a logging transformer stack using the simple logger as backend
+runSimpleLoggingT :: MonadIO m => ML.LoggingT m a -> m a
+runSimpleLoggingT = flip ML.runLoggingT monadLoggerAdapter
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,1 +1,2 @@
-resolver: lts-15.13
+resolver:
+  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/25.yaml
