在使用 AddDbContextCheck 进行健康检查时,出现了 HealthReportEntry 的 description 和 exception 都为空的问题。
解决方法是使用 AddDbContext 方法时,传入一个 Action,在这个方法内部手动测试数据库连接并设置 HealthReportEntry 的描述和异常信息。
示例代码:
services.AddHealthChecks()
.AddDbContextCheck(name: "myDB", failureStatus: HealthStatus.Unhealthy, tags: new[] { "db", "sql", "myDB" },
customTestQuery: async dbContext =>
{
try
{
await dbContext.Database.OpenConnectionAsync();
await dbContext.Database.CloseConnectionAsync();
}
catch (Exception e)
{
throw new InvalidOperationException("Database connection is down.", e.InnerException);
}
},
healthCheckOptions: new HealthCheckOptions
{
AllowCachingResponses = false,
ResultStatusCodes = {
[Microsoft.Extensions.Diagnostics.HealthChecks.HealthStatus.Unhealthy] = StatusCodes.Status503ServiceUnavailable
}
});