diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,16 @@
+# log-elasticsearch-0.9.0.1  (2017-06-19)
+* 'withElasticSearchLogger' no longer fails when the Elasticsearch server is down.
+
+# log-elasticsearch-0.9.0.0 (2017-05-04)
+* Now works with bloodhound-0.14.0.0 (#30).
+
+# log-elasticsearch-0.8.1 (2017-03-27)
+* Log.Backend.ElasticSearch.Internal now exports 'EsUsername' and
+  'EsPassword'.
+
+# log-elasticsearch-0.8 (2017-03-16)
+* Made ElasticSearchConfig an abstract type (#27).
+* Added support for HTTPS and basic auth (#26).
+
+# log-elasticsearch-0.7 (2016-11-25)
+* Initial release (split from the log package).
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# log-elasticsearch [![Hackage version](https://img.shields.io/hackage/v/log-elasticsearch.svg?label=Hackage)](https://hackage.haskell.org/package/log-elasticsearch) [![Build Status](https://secure.travis-ci.org/scrive/log.svg?branch=master)](http://travis-ci.org/scrive/log)
+
+Elasticsearch back end for the `log` library.
diff --git a/log-elasticsearch.cabal b/log-elasticsearch.cabal
--- a/log-elasticsearch.cabal
+++ b/log-elasticsearch.cabal
@@ -1,5 +1,5 @@
 name:                log-elasticsearch
-version:             0.9.0.0
+version:             0.9.0.1
 synopsis:            Structured logging solution (Elasticsearch back end)
 
 description:         Elasticsearch back end for the 'log' library.
@@ -17,6 +17,7 @@
 category:            System
 build-type:          Simple
 cabal-version:       >=1.10
+extra-source-files:  CHANGELOG.md, README.md
 tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2
 
 Source-repository head
diff --git a/src/Log/Backend/ElasticSearch/V1.hs b/src/Log/Backend/ElasticSearch/V1.hs
--- a/src/Log/Backend/ElasticSearch/V1.hs
+++ b/src/Log/Backend/ElasticSearch/V1.hs
@@ -32,6 +32,7 @@
 import Network.HTTP.Client
 import Network.HTTP.Client.TLS (tlsManagerSettings)
 import Prelude
+import System.IO
 import TextShow
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Base64 as B64
@@ -161,9 +162,9 @@
 
     checkElasticSearchConnection :: IO ()
     checkElasticSearchConnection = try (void $ runBH_ listIndices) >>= \case
-      Left (ex::HttpException) -> error $ "ElasticSearch: unexpected error: "
-                                  <> show ex
-                                  <> " (is ElasticSearch server running?)"
+      Left (ex::HttpException) ->
+        hPutStrLn stderr $ "ElasticSearch: unexpected error: " <> show ex
+          <> " (is ElasticSearch server running?)"
       Right () -> return ()
 
     retryOnException :: forall r. IO r -> IO r
diff --git a/src/Log/Backend/ElasticSearch/V5.hs b/src/Log/Backend/ElasticSearch/V5.hs
--- a/src/Log/Backend/ElasticSearch/V5.hs
+++ b/src/Log/Backend/ElasticSearch/V5.hs
@@ -32,6 +32,7 @@
 import Network.HTTP.Client
 import Network.HTTP.Client.TLS (tlsManagerSettings)
 import Prelude
+import System.IO
 import TextShow
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Base64 as B64
@@ -161,9 +162,9 @@
 
     checkElasticSearchConnection :: IO ()
     checkElasticSearchConnection = try (void $ runBH_ listIndices) >>= \case
-      Left (ex::HttpException) -> error $ "ElasticSearch: unexpected error: "
-                                  <> show ex
-                                  <> " (is ElasticSearch server running?)"
+      Left (ex::HttpException) ->
+        hPutStrLn stderr $ "ElasticSearch: unexpected error: " <> show ex
+          <> " (is ElasticSearch server running?)"
       Right () -> return ()
 
     retryOnException :: forall r. IO r -> IO r
