diff --git a/log-warper.cabal b/log-warper.cabal
--- a/log-warper.cabal
+++ b/log-warper.cabal
@@ -1,5 +1,5 @@
 name:                log-warper
-version:             0.2.2
+version:             0.2.3
 synopsis:            Flexible, configurable, monadic and pretty logging
 homepage:            https://github.com/serokell/log-warper
 license:             MIT
diff --git a/src/System/Wlog/CanLog.hs b/src/System/Wlog/CanLog.hs
--- a/src/System/Wlog/CanLog.hs
+++ b/src/System/Wlog/CanLog.hs
@@ -30,6 +30,7 @@
        , logMessage
        ) where
 
+import           Control.Monad.Except      (ExceptT, MonadError)
 import           Control.Monad.Reader      (MonadReader, ReaderT)
 import           Control.Monad.State       (MonadState, StateT)
 import           Control.Monad.Trans       (MonadTrans (lift))
@@ -75,6 +76,7 @@
 instance CanLog m => CanLog (LoggerNameBox m)
 instance CanLog m => CanLog (ReaderT r m)
 instance CanLog m => CanLog (StateT s m)
+instance CanLog m => CanLog (ExceptT s m)
 
 -- | Holds all required information for 'dispatchLoggerName' function.
 data LogEvent = LogEvent
@@ -95,7 +97,7 @@
 newtype PureLogger m a = PureLogger
     { runPureLogger :: WriterT (DList LogEvent) m a
     } deriving (Functor, Applicative, Monad, MonadTrans, MonadWriter (DList LogEvent),
-                MonadState s, MonadReader r, HasLoggerName)
+                MonadState s, MonadReader r, MonadError e, HasLoggerName)
 
 instance Monad m => CanLog (PureLogger m) where
     dispatchMessage leLoggerName leSeverity leMessage = tell [LogEvent{..}]
diff --git a/src/System/Wlog/LoggerNameBox.hs b/src/System/Wlog/LoggerNameBox.hs
--- a/src/System/Wlog/LoggerNameBox.hs
+++ b/src/System/Wlog/LoggerNameBox.hs
@@ -15,14 +15,15 @@
 
 import           Control.Monad.Base          (MonadBase)
 import           Control.Monad.Catch         (MonadCatch, MonadMask, MonadThrow)
-import           Control.Monad.Except        (ExceptT (..), runExceptT)
+import           Control.Monad.Except        (ExceptT (..), mapExceptT)
 import           Control.Monad.Fix           (MonadFix)
-import           Control.Monad.Reader        (MonadReader (..), ReaderT, runReaderT)
-import           Control.Monad.State         (MonadState (get), StateT, evalStateT)
+import           Control.Monad.Reader        (MonadReader (..), ReaderT, mapReaderT,
+                                              runReaderT)
+import           Control.Monad.State         (MonadState, StateT, mapStateT)
 import           Control.Monad.Trans         (MonadIO, MonadTrans, lift)
 import           Control.Monad.Trans.Cont    (ContT, mapContT)
 import           Control.Monad.Trans.Control (MonadBaseControl (..))
-import           Control.Monad.Writer        (WriterT (..))
+import           Control.Monad.Writer        (WriterT (..), mapWriterT)
 
 import           System.Wlog.LoggerName      (LoggerName)
 
@@ -37,28 +38,25 @@
     -- | Change logger name in context
     modifyLoggerName :: (LoggerName -> LoggerName) -> m a -> m a
 
-
 instance (Monad m, HasLoggerName m) => HasLoggerName (ReaderT a m) where
     getLoggerName = lift getLoggerName
 
-    modifyLoggerName how m =
-        ask >>= lift . modifyLoggerName how . runReaderT m
+    modifyLoggerName = mapReaderT . modifyLoggerName
 
 instance (Monad m, HasLoggerName m) => HasLoggerName (StateT a m) where
     getLoggerName = lift getLoggerName
 
-    modifyLoggerName how m =
-        get >>= lift . modifyLoggerName how . evalStateT m
+    modifyLoggerName = mapStateT . modifyLoggerName
 
 instance (Monoid w, Monad m, HasLoggerName m) => HasLoggerName (WriterT w m) where
     getLoggerName = lift getLoggerName
 
-    modifyLoggerName how = WriterT . modifyLoggerName how . runWriterT
+    modifyLoggerName = mapWriterT . modifyLoggerName
 
 instance (Monad m, HasLoggerName m) => HasLoggerName (ExceptT e m) where
     getLoggerName = lift getLoggerName
 
-    modifyLoggerName how = ExceptT . modifyLoggerName how . runExceptT
+    modifyLoggerName = mapExceptT . modifyLoggerName
 
 instance (Monad m, HasLoggerName m) => HasLoggerName (ContT r m) where
     getLoggerName = lift getLoggerName
