我想使用Application Insights仅记录异常。我该怎么办?
我尝试寻找关闭其他设置(例如this)的方法,但它说没有办法将其关闭。
我尝试使用ITelemetryProcessor并遇到与此question相同的问题。我尝试了配置和编码ITelemetryProcessor的方式,但是即使我在Web API控制器中明确抛出异常,也没有成功。
我正在使用VS 2017,并创建了一个新的.Net Framework 4.6.2 Web API。我也有一个InstrumentationKey,可以看到Azure门户中记录的异常。
答案 0 :(得分:1)
首先,您引用的第一个link与您的问题无关。 您只想记录例外情况,但是link意味着删除旧的遥测数据,例如存储库中的Trace(上传到应用程序见解后存储遥测数据的存储位置)。
您可以使用ITelemetryProcessor仅记录异常。请按照以下步骤操作:
1。通过右键单击项目名称->选择Configure Application Insights
,将Application Insights添加到您的Web api项目中:
在添加SDK之后,请勿选择Enable trace collection
:
2。在您的项目中添加一个.cs文件,然后实现您的自定义ITelemetryProcessor类,代码如下:
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
namespace WebApplicationWebApi
{
public class ExceptionsFilter:ITelemetryProcessor
{
private ITelemetryProcessor Next { get; set; }
public ExceptionsFilter(ITelemetryProcessor next)
{
this.Next = next;
}
public void Process(ITelemetry item)
{
string s = item.GetType().Name;
//if it's not exception telemetry, just return without log it to app insights.
if (s != "ExceptionTelemetry")
{
return;
}
this.Next.Process(item);
}
}
}
3。在ApplicationInsights.config中注册您的自定义ITelemetryProcessor。在节点中,添加<Add Type="WebApplicationWebApi.ExceptionsFilter,WebApplicationWebApi"/>
:
4。然后运行您的代码。为了确保调用自定义ITelemetryProcessor类,您可以在该类中设置一个断点,以查看其在运行时是否被命中。
出于测试目的,我在HomeController.cs中添加了一些遥测数据:
public class HomeController : Controller
{
TelemetryClient client = new TelemetryClient();
public ActionResult Index()
{
RequestTelemetry r1 = new RequestTelemetry();
r1.Name = "request message for testing";
client.TrackRequest(r1);
client.TrackTrace("trace message for testing wwwww.");
client.TrackException(new Exception("exception message for testing wwwww."));
ViewBag.Title = "Home Page";
return View();
}
}
5。在visual studio输出窗口中,您应该看到以下消息:
6。然后在Visual Studio中,导航至Application Insights Search
(在vs->视图->其他窗口-> Application Insights搜索中),然后检查此处是否有一些值(如果它具有“ 4”之类的值在下面的屏幕截图中,点击):