diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java index 9deb3f2c14c..f9205fc6da6 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java @@ -34,6 +34,7 @@ public class RabbitHealthIndicator extends AbstractHealthIndicator { private final RabbitTemplate rabbitTemplate; public RabbitHealthIndicator(RabbitTemplate rabbitTemplate) { + super("Rabbit health check failed"); Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null"); this.rabbitTemplate = rabbitTemplate; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java index 584cd1668da..c1c1ebb71bd 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java @@ -37,6 +37,10 @@ public class CassandraHealthIndicator extends AbstractHealthIndicator { private CassandraOperations cassandraOperations; + public CassandraHealthIndicator() { + super("Cassandra health check failed"); + } + /** * Create a new {@link CassandraHealthIndicator} instance. * @param cassandraOperations the Cassandra operations diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java index 13beb6fec8e..f1be889021c 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java @@ -37,6 +37,10 @@ public class CouchbaseHealthIndicator extends AbstractHealthIndicator { private CouchbaseOperations operations; + public CouchbaseHealthIndicator() { + super("Couchbase health check failed"); + } + public CouchbaseHealthIndicator(CouchbaseOperations couchbaseOperations) { Assert.notNull(couchbaseOperations, "CouchbaseOperations must not be null"); this.operations = couchbaseOperations; diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java index 2c219955e91..7be2c324f8f 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java @@ -65,6 +65,7 @@ public class ElasticsearchHealthIndicator extends AbstractHealthIndicator { */ public ElasticsearchHealthIndicator(Client client, long responseTimeout, String... indices) { + super("Elasticsearch health check failed"); this.client = client; this.responseTimeout = responseTimeout; this.indices = indices; diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java index 1d821b860f1..47e21e14431 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java @@ -40,6 +40,7 @@ public class ElasticsearchJestHealthIndicator extends AbstractHealthIndicator { private final JsonParser jsonParser = new JsonParser(); public ElasticsearchJestHealthIndicator(JestClient jestClient) { + super("Elasticsearch health check failed"); this.jestClient = jestClient; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java index d48e861f9ee..f8de0948408 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java @@ -16,10 +16,14 @@ package org.springframework.boot.actuate.health; +import java.util.function.Function; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.actuate.health.Health.Builder; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * Base {@link HealthIndicator} implementations that encapsulates creation of @@ -34,8 +38,45 @@ import org.springframework.boot.actuate.health.Health.Builder; */ public abstract class AbstractHealthIndicator implements HealthIndicator { + private static final String NO_MESSAGE = null; + + private static final String DEFAULT_MESSAGE = "Health check failed"; + private final Log logger = LogFactory.getLog(getClass()); + private final Function healthCheckFailedMessage; + + /** + * Create a new {@link AbstractHealthIndicator} instance with a default + * {@code healthCheckFailedMessage}. + */ + public AbstractHealthIndicator() { + this(NO_MESSAGE); + } + + /** + * Create a new {@link AbstractHealthIndicator} instance with a specific message to + * log when the health check fails. + * @param healthCheckFailedMessage the message to log on health check failure + * @since 2.0.0 + */ + protected AbstractHealthIndicator(String healthCheckFailedMessage) { + this.healthCheckFailedMessage = (ex) -> healthCheckFailedMessage; + } + + /** + * Create a new {@link AbstractHealthIndicator} instance with a specific message to + * log when the health check fails. + * @param healthCheckFailedMessage the message to log on health check failure + * @since 2.0.0 + */ + protected AbstractHealthIndicator( + Function healthCheckFailedMessage) { + Assert.notNull(healthCheckFailedMessage, + "HealthCheckFailedMessage must not be null"); + this.healthCheckFailedMessage = healthCheckFailedMessage; + } + @Override public final Health health() { Health.Builder builder = new Health.Builder(); @@ -43,7 +84,11 @@ public abstract class AbstractHealthIndicator implements HealthIndicator { doHealthCheck(builder); } catch (Exception ex) { - this.logger.warn("Health check failed", ex); + if (this.logger.isWarnEnabled()) { + String message = this.healthCheckFailedMessage.apply(ex); + this.logger.warn(StringUtils.hasText(message) ? message : DEFAULT_MESSAGE, + ex); + } builder.down(ex); } return builder.build(); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ApplicationHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ApplicationHealthIndicator.java index af300475dcf..6b184fbbccd 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ApplicationHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ApplicationHealthIndicator.java @@ -25,6 +25,10 @@ package org.springframework.boot.actuate.health; */ public class ApplicationHealthIndicator extends AbstractHealthIndicator { + public ApplicationHealthIndicator() { + super("Application health check failed"); + } + @Override protected void doHealthCheck(Health.Builder builder) throws Exception { builder.up(); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicator.java index 53841cd0d87..20bd3baffed 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicator.java @@ -35,6 +35,7 @@ public class InfluxDbHealthIndicator extends AbstractHealthIndicator { private final InfluxDB influxDb; public InfluxDbHealthIndicator(InfluxDB influxDb) { + super("InfluxDB health check failed"); Assert.notNull(influxDb, "InfluxDB must not be null"); this.influxDb = influxDb; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java index 7946170a44e..73779c09bc4 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java @@ -64,6 +64,7 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator * Create a new {@link DataSourceHealthIndicator} instance. */ public DataSourceHealthIndicator() { + this(null, null); } /** @@ -82,6 +83,7 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator * @param query the validation query to use (can be {@code null}) */ public DataSourceHealthIndicator(DataSource dataSource, String query) { + super("DataSource health check failed"); this.dataSource = dataSource; this.query = query; this.jdbcTemplate = new JdbcTemplate(dataSource); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java index 320d23b9009..ddcdf1a6830 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java @@ -34,6 +34,7 @@ public class JmsHealthIndicator extends AbstractHealthIndicator { private final ConnectionFactory connectionFactory; public JmsHealthIndicator(ConnectionFactory connectionFactory) { + super("JMS health check failed"); this.connectionFactory = connectionFactory; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java index ae1b2effe0e..d4b1c6a8ac5 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java @@ -40,6 +40,7 @@ public class LdapHealthIndicator extends AbstractHealthIndicator { private final LdapOperations ldapOperations; public LdapHealthIndicator(LdapOperations ldapOperations) { + super("LDAP health check failed"); Assert.notNull(ldapOperations, "LdapOperations must not be null"); this.ldapOperations = ldapOperations; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java index ed46e361fef..94d1bff14ee 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java @@ -32,6 +32,7 @@ public class MailHealthIndicator extends AbstractHealthIndicator { private final JavaMailSenderImpl mailSender; public MailHealthIndicator(JavaMailSenderImpl mailSender) { + super("Mail health check failed"); this.mailSender = mailSender; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java index c5ec7c99a43..cef1ec0d670 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java @@ -36,6 +36,7 @@ public class MongoHealthIndicator extends AbstractHealthIndicator { private final MongoTemplate mongoTemplate; public MongoHealthIndicator(MongoTemplate mongoTemplate) { + super("MongoDB health check failed"); Assert.notNull(mongoTemplate, "MongoTemplate must not be null"); this.mongoTemplate = mongoTemplate; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java index ec9d7c6caa8..78d9559ba59 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java @@ -50,6 +50,7 @@ public class Neo4jHealthIndicator extends AbstractHealthIndicator { * @param sessionFactory the SessionFactory */ public Neo4jHealthIndicator(SessionFactory sessionFactory) { + super("Neo4J health check failed"); this.sessionFactory = sessionFactory; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java index 00c2f0e1249..04dca01e285 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java @@ -45,6 +45,7 @@ public class RedisHealthIndicator extends AbstractHealthIndicator { private final RedisConnectionFactory redisConnectionFactory; public RedisHealthIndicator(RedisConnectionFactory connectionFactory) { + super("Reddis health check failed"); Assert.notNull(connectionFactory, "ConnectionFactory must not be null"); this.redisConnectionFactory = connectionFactory; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java index bf22abf5000..a1146fa71a4 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java @@ -38,6 +38,7 @@ public class SolrHealthIndicator extends AbstractHealthIndicator { private final SolrClient solrClient; public SolrHealthIndicator(SolrClient solrClient) { + super("Solr health check failed"); this.solrClient = solrClient; } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java index 7e765c14c07..6b7bbbb3c97 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java @@ -48,6 +48,7 @@ public class DiskSpaceHealthIndicator extends AbstractHealthIndicator { * @param threshold the minimum disk space that should be available (in bytes) */ public DiskSpaceHealthIndicator(File path, long threshold) { + super("DiskSpace health check failed"); this.path = path; this.threshold = threshold; }