[IExceptionLogger][1]
を実装している例外ログは、コントローラアクションから例外がスローされたときに2回呼び出されます。ASP.NET Web API 2回呼び出されたIExceptionLogger
context.RequestContext.Configuration.Services.GetServices(typeof(IExceptionLogger))
これは単一のエントリを返すので、私はロガーのインスタンスが1つしか登録されていないと確信しています。未処理の例外を2回ログに記録することは望ましくありません。それを引き起こす原因をトラブルシューティングするにはどうすればよいですか?
LogAsync()
メソッドにブレークポイントを設定した場合、呼び出しスタックは両方の呼び出しで[External Code]
と表示されます。
[RoutePrefix("test")]
public class MyController : ApiController
{
[HttpGet, AllowAnonymous]
[Route("test")]
public string GetTest()
{
throw new InvalidOperationException("Shit happens");
}
}
ロガーは、このように注入された:それは代わりにExceptionLoggerから継承されるように
config.Services.Add(typeof(IExceptionLogger), new WebApiExceptionLogger());
public class WebApiExceptionLogger : IExceptionLogger
{
private readonly ILoggingService loggingService;
public WebApiExceptionLogger()
{
this.loggingService = ServiceContainer.Factory.Resolve<ILoggingService>();
}
public Task LogAsync(ExceptionLoggerContext context, CancellationToken cancellationToken)
{
this.loggingService.Log(LogLevel.Error, this.GetType().Name, context.Exception, "Ship has just happened");
return Task.FromResult(true);
}
}
ロガーコードを表示しますか?ただ2つの例外がスローされるのは可能でしょうか? – MartinM