diff --git a/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/HealthStatus.cs b/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/HealthStatus.cs
index d4293cb7b4..ad3f40a201 100644
--- a/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/HealthStatus.cs
+++ b/src/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/HealthStatus.cs
@@ -12,6 +12,10 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
/// and the corresponding value of .
///
///
+ /// A status of should be considered the default value for a failing health check. Application
+ /// developers may configure a health check to report a different status as desired.
+ ///
+ ///
/// The values of this enum or ordered from least healthy to most healthy. So is
/// greater than but less than .
///
diff --git a/src/Microsoft.Extensions.Diagnostics.HealthChecks/DefaultHealthCheckService.cs b/src/Microsoft.Extensions.Diagnostics.HealthChecks/DefaultHealthCheckService.cs
index 1b08acb60b..0e907d7872 100644
--- a/src/Microsoft.Extensions.Diagnostics.HealthChecks/DefaultHealthCheckService.cs
+++ b/src/Microsoft.Extensions.Diagnostics.HealthChecks/DefaultHealthCheckService.cs
@@ -154,10 +154,28 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
EventIds.HealthCheckBegin,
"Running health check {HealthCheckName}");
- private static readonly Action _healthCheckEnd = LoggerMessage.Define(
+ // These are separate so they can have different log levels
+ private static readonly string HealthCheckEndText = "Health check {HealthCheckName} completed after {ElapsedMilliseconds}ms with status {HealthStatus} and '{HealthCheckDescription}'";
+
+ private static readonly Action _healthCheckEndHealthy = LoggerMessage.Define(
LogLevel.Debug,
EventIds.HealthCheckEnd,
- "Health check {HealthCheckName} completed after {ElapsedMilliseconds}ms with status {HealthStatus} and '{HealthCheckDescription}'");
+ HealthCheckEndText);
+
+ private static readonly Action _healthCheckEndDegraded = LoggerMessage.Define(
+ LogLevel.Warning,
+ EventIds.HealthCheckEnd,
+ HealthCheckEndText);
+
+ private static readonly Action _healthCheckEndUnhealthy = LoggerMessage.Define(
+ LogLevel.Error,
+ EventIds.HealthCheckEnd,
+ HealthCheckEndText);
+
+ private static readonly Action _healthCheckEndFailed = LoggerMessage.Define(
+ LogLevel.Error,
+ EventIds.HealthCheckEnd,
+ HealthCheckEndText);
private static readonly Action _healthCheckError = LoggerMessage.Define(
LogLevel.Error,
@@ -181,7 +199,24 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
public static void HealthCheckEnd(ILogger logger, HealthCheckRegistration registration, HealthReportEntry entry, TimeSpan duration)
{
- _healthCheckEnd(logger, registration.Name, duration.TotalMilliseconds, entry.Status, entry.Description, null);
+ switch (entry.Status)
+ {
+ case HealthStatus.Healthy:
+ _healthCheckEndHealthy(logger, registration.Name, duration.TotalMilliseconds, entry.Status, entry.Description, null);
+ break;
+
+ case HealthStatus.Degraded:
+ _healthCheckEndDegraded(logger, registration.Name, duration.TotalMilliseconds, entry.Status, entry.Description, null);
+ break;
+
+ case HealthStatus.Unhealthy:
+ _healthCheckEndUnhealthy(logger, registration.Name, duration.TotalMilliseconds, entry.Status, entry.Description, null);
+ break;
+
+ case HealthStatus.Failed:
+ _healthCheckEndFailed(logger, registration.Name, duration.TotalMilliseconds, entry.Status, entry.Description, null);
+ break;
+ }
}
public static void HealthCheckError(ILogger logger, HealthCheckRegistration registration, Exception exception, TimeSpan duration)