diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,15 +1,18 @@
 # Changelog for log4hs
 
-## V0.3.0
-- Add `RotatingFileHandler` (without unit tests)
+## V0.7.1
+- Fix error handling issue
 
-## V0.3.1
-- Fix `defaultRoot` format bug
+## V0.7.0
+- Fix `RotatingFileHandler` rollover bug
+- Flatten `Logging.Types`
+- Make timezone of logging environment configurable
+- Add `TimeRotatingFileHandler`
 
-## V0.4.0
-- Add `Config` module to decode `Manager` from json and yaml
-- Mark `Logging.Aeson` as deprecated
-- Remove `Logging.Deprecated` module
+## V0.6.0
+- Add local logging (run in monad)
+- Redesign global logging
+- Remove `stderrHandler` `stdoutHandler` `defaultRoot`
 
 ## V0.5.0
 - Mark `stderrHandler` `stdoutHandler` `defaultRoot` as deprecated
@@ -18,13 +21,13 @@
 - Refine tests
 - Fix `callHandler` redundant check
 
-## V0.6.0
-- Add local logging (run in monad)
-- Redesign global logging
-- Remove `stderrHandler` `stdoutHandler` `defaultRoot`
+## V0.4.0
+- Add `Config` module to decode `Manager` from json and yaml
+- Mark `Logging.Aeson` as deprecated
+- Remove `Logging.Deprecated` module
 
-## V0.7.0
-- Fix `RotatingFileHandler` rollover bug
-- Flatten `Logging.Types`
-- Make timezone of logging environment configurable
-- Add `TimeRotatingFileHandler`
+## V0.3.1
+- Fix `defaultRoot` format bug
+
+## V0.3.0
+- Add `RotatingFileHandler` (without unit tests)
diff --git a/log4hs.cabal b/log4hs.cabal
--- a/log4hs.cabal
+++ b/log4hs.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: cbfd6363e7bbeaee5e3e8cc995db591bf20b5f5ae9b3c4e159ad8501ed2a3cfe
+-- hash: 40bf737c00b6bef41f168df6d0a764776ea87f6bd584dc12b6e12ce2764770b6
 
 name:           log4hs
-version:        0.7.0.0
+version:        0.7.1.0
 synopsis:       A python logging style log library
 description:    Please see the http://hackage.haskell.org/package/log4hs
 category:       logging
diff --git a/src/Logging/Class/Handler.hs b/src/Logging/Class/Handler.hs
--- a/src/Logging/Class/Handler.hs
+++ b/src/Logging/Class/Handler.hs
@@ -6,6 +6,7 @@
 
 module Logging.Class.Handler ( SomeHandler(..), Handler(..) ) where
 
+import           Control.Exception           (SomeException, catch)
 import           Control.Lens                (set, view)
 import           Control.Monad               (when)
 import           Data.Generics.Product.Typed
@@ -80,12 +81,18 @@
   --
   -- Note: You can override the default implementation.
   handle :: a -> LogRecord -> IO Bool
-  handle hdl rcd@LogRecord{level=level'}
-    | level' < view (typed @Level) hdl = return False
-    | otherwise =
-      if filter (view (typed @Filterer) hdl) rcd
-         then emit hdl rcd >> return True
-         else return False
+  handle hdl rcd@LogRecord{level=level', message=message}
+      | level' < view (typed @Level) hdl = return False
+      | not (filter (view (typed @Filterer) hdl) rcd) = return False
+      | otherwise = catch (emit hdl rcd >> return True) handleError
+    where
+      -- TODO How to test
+      handleError :: SomeException -> IO Bool
+      handleError e = do
+        putStrLn "--- Logging error ---"
+        putStrLn $ show e
+        putStrLn $ "Message: " ++ message
+        return False
 
   fromHandler :: SomeHandler -> Maybe a
   fromHandler (SomeHandler h) = cast h
diff --git a/src/Logging/Global/Internal.hs b/src/Logging/Global/Internal.hs
--- a/src/Logging/Global/Internal.hs
+++ b/src/Logging/Global/Internal.hs
@@ -11,7 +11,6 @@
 import           Control.Monad
 import           Control.Monad.IO.Class
 import           Data.IORef
-import           GHC.Conc
 import           Prelude                hiding (log)
 import           System.IO.Unsafe
 
@@ -67,13 +66,14 @@
 -}
 run :: Manager -> IO a -> IO a
 run manager@Manager{..} io = do
-    oldHandler <- getUncaughtExceptionHandler
-    when catchUncaughtException $ setUncaughtExceptionHandler logException
     bracket_ (initialize manager >> atomicWriteIORef ref manager)
-             (terminate manager >> setUncaughtExceptionHandler oldHandler)
-             io
+             (terminate manager)
+             (runInner catchUncaughtException io)
   where
     unknownLoc = ("unknown file", "unknown package", "unknown module", 0)
 
-    logException :: SomeException -> IO ()
-    logException e = log "" "ERROR" (show e) unknownLoc
+    runInner :: Bool -> IO a -> IO a
+    runInner False io = io
+    runInner True io  = catch io $ \e -> do
+      log "" "ERROR" (show (e :: SomeException)) unknownLoc
+      runInner True io
