diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011-2014 Simon Hengel <sol@typeful.net>
+Copyright (c) 2011-2015 Simon Hengel <sol@typeful.net>
 Copyright (c) 2011-2012 Trystan Spangler <trystan.s@comcast.net>
 Copyright (c) 2011-2011 Greg Weber <greg@gregweber.info>
 
diff --git a/hspec-contrib.cabal b/hspec-contrib.cabal
--- a/hspec-contrib.cabal
+++ b/hspec-contrib.cabal
@@ -1,8 +1,8 @@
 name:             hspec-contrib
-version:          0.2.0
+version:          0.2.1
 license:          MIT
 license-file:     LICENSE
-copyright:        (c) 2011-2014 Simon Hengel,
+copyright:        (c) 2011-2015 Simon Hengel,
                   (c) 2014 Junji Hashimoto
 
 maintainer:       Simon Hengel <sol@typeful.net>
@@ -29,9 +29,11 @@
       base == 4.*
     , hspec-core
     , HUnit
+    , logging-facade
   exposed-modules:
       Test.Hspec.Contrib.Retry
       Test.Hspec.Contrib.HUnit
+      Test.Hspec.Contrib.LoggingFacade
   other-modules:
   default-language: Haskell2010
 
@@ -43,14 +45,17 @@
   main-is:
       Spec.hs
   other-modules:
+      Helper
       Test.Hspec.Contrib.RetrySpec
       Test.Hspec.Contrib.HUnitSpec
+      Test.Hspec.Contrib.LoggingFacadeSpec
   ghc-options:
       -Wall
   build-depends:
       base == 4.*
     , hspec-core
     , HUnit
+    , logging-facade
 
     , hspec-contrib
     , hspec
diff --git a/src/Test/Hspec/Contrib/LoggingFacade.hs b/src/Test/Hspec/Contrib/LoggingFacade.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/Hspec/Contrib/LoggingFacade.hs
@@ -0,0 +1,25 @@
+module Test.Hspec.Contrib.LoggingFacade (
+  captureLogs
+) where
+
+import           Control.Exception
+import           Data.IORef
+import           System.Logging.Facade.Types
+import           System.Logging.Facade.Sink
+
+-- | Capture all logs produced by an IO action.
+-- Logs are kept in memory.
+captureLogs :: IO a -> IO ([LogRecord], a)
+captureLogs action = bracket enter exit act
+  where
+    logToRef ref record = atomicModifyIORef' ref $ \logs -> (record : logs, ())
+    enter = do
+      oldSink <- getLogSink
+      ref <- newIORef []
+      setLogSink $ logToRef ref
+      return (oldSink, ref)
+    exit (oldSink, _) = setLogSink oldSink
+    act (_, ref)  = do
+      val <- action
+      logs <- readIORef ref
+      return (reverse logs, val)
diff --git a/test/Helper.hs b/test/Helper.hs
new file mode 100644
--- /dev/null
+++ b/test/Helper.hs
@@ -0,0 +1,11 @@
+module Helper (
+  module Test.Hspec
+, module Test.QuickCheck
+, module Control.Applicative
+, module Data.IORef
+) where
+
+import           Test.Hspec
+import           Test.QuickCheck
+import           Control.Applicative
+import           Data.IORef
diff --git a/test/Test/Hspec/Contrib/HUnitSpec.hs b/test/Test/Hspec/Contrib/HUnitSpec.hs
--- a/test/Test/Hspec/Contrib/HUnitSpec.hs
+++ b/test/Test/Hspec/Contrib/HUnitSpec.hs
@@ -1,9 +1,7 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.Hspec.Contrib.HUnitSpec (main, spec) where
 
-import           Test.Hspec
-import           Test.QuickCheck
-import           Control.Applicative
+import           Helper
 
 import           Test.Hspec.Core.Spec
 import           Test.Hspec.Contrib.HUnit
diff --git a/test/Test/Hspec/Contrib/LoggingFacadeSpec.hs b/test/Test/Hspec/Contrib/LoggingFacadeSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Hspec/Contrib/LoggingFacadeSpec.hs
@@ -0,0 +1,32 @@
+module Test.Hspec.Contrib.LoggingFacadeSpec (main, spec) where
+
+import Test.Hspec
+import Data.IORef
+import System.Logging.Facade.Types
+import System.Logging.Facade.Sink
+import System.Logging.Facade as Log
+
+import Test.Hspec.Contrib.LoggingFacade
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = describe "Hspec.Contrib.LoggingFacade" $ do
+  describe "captureLogs" $ do
+    let logToIORef :: IORef [LogRecord] -> LogSink
+        logToIORef ref record = modifyIORef ref (record :)
+
+    it "returns all logs of an action" $ do
+      (logs, ()) <- captureLogs $ do
+        Log.trace "this should be captured"
+        Log.trace "this should be captured next"
+      logs `shouldBe` [ LogRecord TRACE Nothing "this should be captured"
+                      , LogRecord TRACE Nothing "this should be captured next"
+                      ]
+
+    it "prevents logs from going to the log sink" $ do
+      ref <- newIORef []
+      setLogSink $ logToIORef ref
+      _ <- captureLogs $ Log.trace "this should be captured"
+      readIORef ref `shouldReturn` []
diff --git a/test/Test/Hspec/Contrib/RetrySpec.hs b/test/Test/Hspec/Contrib/RetrySpec.hs
--- a/test/Test/Hspec/Contrib/RetrySpec.hs
+++ b/test/Test/Hspec/Contrib/RetrySpec.hs
@@ -1,8 +1,7 @@
 module Test.Hspec.Contrib.RetrySpec (main, spec) where
 
-import           Data.IORef
+import           Helper
 
-import           Test.Hspec
 import           Test.Hspec.Contrib.Retry
 
 main :: IO ()
