以下の問題があります。非同期エンティティのフレームワーク関数は、キャンセルするとTaskCanceledException
を生成します。私はこの例外をキャッチし、適切に処理しています。しかし、私は欲しくない例外がまだログに記録されます。処理前のロギング例外
簡体設定:
[HttpGet]
[Route("page")]
public async Task<IActionResult> GetPage(
int? page, int? size,
CancellationToken ct)
{
try {
var response = await _mailService.GetPageAsync(page, size, ct: ct);
return Respond(response); // Turn service response into HTTP response
}
catch (OperationCanceledException) {
// When reaching here, Exception already logged
// If it should be cancelled
if (ct.IsCancellationRequested) {
// Empty result
return new EmptyResult();
}
else {
// Else raise again
throw; // Never reached
}
}
}
私はまた、すべての非同期エンティティフレームワークの操作にCancellationToken
を渡します。エンティティ関数の周りで例外をキャッチしようとしました。
try {
page = query.ToListAsync(ct);
catch(TaskCanceledException){
// When reaching here, Exception already logged
return null;
}
しかし、同じ動作です。キャッチブロックに入るとすぐに、Exceptionはすでにログに記録されています。ログ記録のために
私はこの構成
var logConfig = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext();
// Add Sinks
// Create Logger
Log.Logger = logConfig.CreateLogger();
// Configure()
loggerFactory.AddSerilog();
でSerilogを使用し、異なるこれを処理するか、私がログにTaskCanceledExceptions
を抑制しなければならない方法はありますか?
私は推測していますしかし、私はEFが例外を記録していると思います。 – juunas
ここに表示されています:https://github.com/aspnet/EntityFramework/blob/dev/src/Microsoft.EntityFrameworkCore/DbContext.cs#L351 – juunas
EFをログに記録しないようにするか、グローバルにのみオプションを抑制するようにEFを設定する必要はありますか? – Mats391