Я хочу, чтобы определенные исключения регистрировались в приложениях как предупреждения, а не как исключения. К сожалению, я не могу изменить код, который генерирует исключения, поэтому вместо этого я создал TelemetryProcessor ( на основе этого ответа ).
Однако TraceTelemetry
, созданный этим кодом, никогдадостигает Application Insights. Я проверил обе метрики в реальном времени и подождал пару минут, пока записи не появятся в поиске.
Я думаю, что мне не хватает некоторых вещей, например, правильного контекста, но я не уверен, что копировать. Свойство Context
доступно только для чтения, поэтому я не могу просто использовать его повторно.
public class ExceptionTelemetryProcessor : ITelemetryProcessor
{
private ITelemetryProcessor Next { get; set; }
public ExceptionTelemetryProcessor(ITelemetryProcessor next)
{
Next = next;
}
public void Process(ITelemetry item)
{
if (item is ExceptionTelemetry exceptionTelemetry
&& exceptionTelemetry.Exception is Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException bhre
&& bhre.StatusCode == 408)
{
// Track exception as warning instead
var traceTelemetry = new TraceTelemetry(exceptionTelemetry.Exception.Message, SeverityLevel.Warning);
Next.Process(traceTelemetry);
}
else
{
Next.Process(item);
}
}
}