Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 应用程序洞察-日志记录异常_Azure_Azure Application Insights - Fatal编程技术网

Azure 应用程序洞察-日志记录异常

Azure 应用程序洞察-日志记录异常,azure,azure-application-insights,Azure,Azure Application Insights,我在我的应用程序中为应用程序洞察编写了一个自定义记录器。在Azure Portal中查看应用程序洞察时,我没有看到任何异常或事件。这是logger类代码,当我调试代码时,我确实看到一个分配给InstrumentationKey属性的键,你知道我这里做错了什么吗?我是否需要将其他信息附加到客户端或配置 公共类AppInsightsLogger:ILogger { 专用遥测客户端ai; 公共应用程序InsightsLogger() { ai=新遥测客户端(); if(string.IsNullOrE

我在我的应用程序中为应用程序洞察编写了一个自定义记录器。在Azure Portal中查看应用程序洞察时,我没有看到任何异常或事件。这是logger类代码,当我调试代码时,我确实看到一个分配给InstrumentationKey属性的键,你知道我这里做错了什么吗?我是否需要将其他信息附加到客户端或配置

公共类AppInsightsLogger:ILogger
{
专用遥测客户端ai;
公共应用程序InsightsLogger()
{
ai=新遥测客户端();
if(string.IsNullOrEmpty(ai.InstrumentationKey))
{
//尝试从应用程序设置加载检测密钥
var appSettingsTiKey=AppSettings.InsightsKey;
如果(!string.IsNullOrEmpty(appSettingsTiKey))
{
TelemetryConfiguration.Active.InstrumentationKey=AppSettingStKey;
ai.InstrumentationKey=AppSettingStKey;
}
其他的
{
抛出新异常(“无法找到应用程序洞察的检测键”);
}
}
}
公共无效日志例外(例外情况除外)
{
ai.轨道例外(ex);
}
}

我创建了一个新的控制台应用程序,安装了最新的稳定应用程序Insights SDK,并基本上保留了您的示例,但有一个细微但重要的区别——我要么让它在调用TrackException后等待关机,要么添加了TelemetryClient.Flush()

名称空间日志测试
{
班级计划
{
静态void Main(字符串[]参数)
{
AppInsightsLogger=新的AppInsightsLogger();
logger.LogException(新的InvalidOperationException(“数据是否显示?”);
//或者在ai.TrackException()之后等待几分钟,等待将要发送的批处理,或者在ai.TrackException()之后添加ai.Flush()立即发送批处理
Console.ReadLine();
}
}
公共类AppInsightsLogger
{
专用遥测客户端ai;
公共应用程序InsightsLogger()
{
ai=新遥测客户端();
if(string.IsNullOrEmpty(ai.InstrumentationKey))
{
//尝试从应用程序设置加载检测密钥
var appSettingsTiKey=“”;
如果(!string.IsNullOrEmpty(appSettingsTiKey))
{
TelemetryConfiguration.Active.InstrumentationKey=AppSettingStKey;
ai.InstrumentationKey=AppSettingStKey;
}
其他的
{
抛出新异常(“无法找到应用程序洞察的检测键”);
}
}
}
公共无效日志例外(例外情况除外)
{
ai.轨道例外(ex);
//ai.Flush();
}
}
}
首先,我可以在Visual Studio调试输出窗口中看到发送的遥测项:

然后我可以看到遥测技术在Fiddler中离开了我的机器,我还可以看到它被我们的数据收集端点成功地接受了。

最后我可以在门户中看到它:


如今,这个问题和公认的答案已经过时了。当前的方法是添加
Microsoft.ApplicationInsights.AspNet
NuGet软件包,该软件包具有即时登录功能

请参阅

文件的要点如下:

  • ApplicationInsightsLoggerProvider
    默认启用
  • 捕获的日志类型可以在
    appsettings.json
    中配置(如果确实需要,也可以通过编程方式配置)

  • 对于版本3的webjob,我尝试实例化遥测客户端并调用TrackException(),以及调用Flush()并等待180秒,但都没有成功。工作原理是使用ILogger logger对象并将异常传递到LogError()。

    TelemetryClient.Flush()
    帮助。谢谢……这真的很有帮助!我从Azure portal启用了应用程序洞察,它显示了我的跟踪信息,当我通过代码在我的应用程序上启用它时,跟踪没有通过。。。就是这样!公认的答案不是过时的,它只是针对.net framework,而这个答案是针对.net core.Ah的。这太棒了。。所以,如果你对了@Alex Klaus,我不必在catch块中显式调用我的记录器。。。Application Insights SDK为我抓取并发送给AI?它会抓取整个异常对象让我在门户中查看吗?@spencer741,是的,你理解正确。在后台,它添加了中间件,该中间件连接到管道中并处理异常。
        "Logging": {
            "LogLevel": {
                "Default": "Warning"
            },
            "ApplicationInsights": {
                "LogLevel": {
                    "Default": "Error"
                }
            }
        }