当我在EF Core中使用EnableRetryOnFailure
时,我会收到有关每个瞬时错误的错误级别日志。这些暂时性错误绝大多数时候都可以忽略,因为事务将被重试并且可能会成功。
但是,我看不出有什么方法可以在日志中区分情况a)“由于暂时性错误而重试”与b)“所有允许的重试均失败”。理想情况下,前者将是较低级别的LogLevel,或者将其包装在某种SqlTransientRetryException
或其他某种东西中。
这对我来说是个问题,因为我不想收到提醒我注意每个瞬态异常的警报,但是我也不想仅筛选出任何Microsoft.EntityFrameworkCore.Query
错误日志,因为如果错误不是暂时的,或者所有允许的重试都失败了,那么我想知道一下。
答案 0 :(得分:0)
我看了一下EF Core文档的Logging部分,DbLoggerCategory类的文档,并在GitHub上的代码中进行了探讨,似乎没有任何区别。造成暂时性错误...就记录而言。
我认为您能做的最好的事情就是向团队提出一个问题。也许他们可以为瞬态故障引入一个类别。
作为一个延伸(我尚未检查),日志消息本身可能存在一些区别。如果可以想象的话,您可以编写一个日志接收器,通过查看消息的内容来过滤这些接收器。这似乎是骇人听闻的,不是很好地利用时间。
另一种可能性是取消所有日志记录并包装您的呼叫;当“真正的”非暂时异常最终冒出来时,您可以记录下来。