0

我将 ILogger ( Microsoft.Extensions.Logging) 与应用程序洞察一起使用。我想知道在使用时BeginScope()如何自动跟踪所有依赖项,如果可能的话?

例如,这段代码:

            using (var scope = this.logger.BeginScope(new Dictionary<string, string>
            {
                { "Reference", "HelloWorld" }
            }))
            {
                this.logger.LogDebug("Foo");
                this.logger.LogInformation("Bar.");
                var response = await this.httpClient.PostAsync(..); // dependency tracking
            }

这会将Reference字段记录为跟踪上的自定义维度,但是,依赖项条目没有任何自定义维度。这必须手动完成还是我错过了什么?

在此处输入图像描述

应该详细说明,这些 ^^ 未附加到跟踪的依赖项条目,我正在使用托管服务并通过以下方式连接应用程序洞察力services.AddApplicationInsightsTelemetryWorkerService()

4

1 回答 1

0

目前无法根据 ilogger 范围将遥测项目组合在一起。

在应用程序洞察力中,将一组遥测数据逻辑组合在一起的推荐方法是使用StartOperationAPI。一个简单的例子如下所示:

using (telemetryClient.StartOperation<RequestTelemetry>("logical operation to be grouped."))
            {
                using (var scope = logger.BeginScope(new Dictionary<string, object>
                    {
                        { "Reference", "HelloWorld" }
                    }))
                {
                    logger.LogWarning("Foo");
                    var res = new HttpClient().GetAsync("https://bing.com").Result.StatusCode;
                }
            }

在此示例中,生成的所有遥测数据——“父请求遥测”、ilogger 日志、依赖遥测(以及 StartOperation 中的任何其他内容)都将具有相同的 operationid,并且可以如下所示进行查询:

union requests,dependencies,traces 
| where operation_Id == 'daf85c73470f80448394748b5067f6e8'

分析结果

另请注意,在常规 Web 应用程序中,从单个请求范围生成的所有遥测数据将自动关联在一起。上面的示例显示了如何手动应用分组 - 通常在控制台应用程序等中需要。

于 2020-02-26T21:07:27.843 回答