当我在EF Core中使用EnableRetryOnFailure
时,我会在每个瞬态错误上获得错误级别的日志。绝大多数时候这些瞬态错误是可以安全忽略的,因为事务即将被重试并且可能会成功。
但是,我没有看到任何方法来区分情况a)“由于暂时性错误而重试”和b)“所有允许的重试都失败了”。理想情况下,前者是较低严重性的LogLevel,或者包含在某种SqlTransientRetryException
或其他东西中。
这对我来说是一个问题,因为我不想收到警报,提醒我注意每个瞬态异常,但我也不想只筛选出任何Microsoft.EntityFrameworkCore.Query
错误日志,因为如果错误不是短暂的或全部允许重试失败,然后我想了解它。
我看了一下EF Core文档的Logging部分,DbLoggerCategory类的文档,并且在GitHub上的代码上看了一下,看起来对于瞬态错误没有任何区别......就记录而言去。
我认为你能做的最好的事情就是向团队提出一个问题。也许他们可以为瞬态故障引入一个类别。
作为一个延伸(我还没有检查),也许记录消息本身有一些不同的东西。如果有,你可以想象写一个记录接收器,通过查看消息的内容来过滤这些。这似乎是hackish,而不是很好地利用时间。
另一种可能性是禁止所有日志记录并打包你的电话;当一个“真正的”非瞬态异常终于冒出来时,你可以记录下来。