自定义遥测处理器未加载

时间:2017-05-11 07:57:52

标签: c# azure azure-application-insights

我已经编写了一个小型遥测处理器来过滤掉一些对我的应用程序来说不是问题的HTTP 404。我一直关注Microsoft's doc这个过程。

我创建了一个实现ITelemetryProcessor的新类,并设置了构造函数和进程函数。

namespace My_App
{
    class WebJobQueuesDependencyFilter : ITelemetryProcessor
    {
        private ITelemetryProcessor Next { get; set; }

        // Link processors to each other in a chain.
        public WebJobQueuesDependencyFilter(ITelemetryProcessor next)
        {
            this.Next = next;
        }

        public void Process(ITelemetry item)
        {
            var request = item as RequestTelemetry;

            if (request != null &&
            request.ResponseCode.Equals("404", StringComparison.OrdinalIgnoreCase))
            {
                // To filter out an item, just terminate the chain:
                return;
            }
            // Send everything else:
            this.Next.Process(item);
        }
    }
}

我还在<TelemetryProcessors>

下的ApplicationInsights.config中添加了一个新行
<Add Type="My_App.WebJobQueuesDependencyFilter, My_App" />

启动程序后,我在Visual Studio中看到以AI记录的以下消息。

AI: ApplicationInsights configuration file loading failed. Type 'My_App.WebJobQueuesDependencyFilter, My_App' was not found. Type loading was skipped. Monitoring will continue.

我怀疑问题在于配置中的行。微软的文档似乎没有详细说明该行应包含的内容。我基于MS示例的猜测是过滤器类的命名空间路径和我的应用程序的命名空间。

2 个答案:

答案 0 :(得分:3)

您可能忘记标记班级public,因此找不到类型。将您的遥测处理器更新为public

public class WebJobQueuesDependencyFilter : ITelemetryProcessor

此外,指定类型的正确方法包括遥测处理器的完全限定名称,后跟程序集名称。因此,在您的示例中,程序集名称必须为My_App

<!-- Fully qualified type name, assembly name: -->
<Add Type="My_App.WebJobQueuesDependencyFilter, My_App" />

希望这有帮助!

答案 1 :(得分:3)

事实证明我的问题分为两部分。

我宣布遥测处理器的方式不正确,并degant's answer更正了。

我发现的第二个问题是定制的遥测处理器&#39;除非您在配置中设置InstrumentationKey,否则永远不会调用过程方法。在本地开发时将其留空是不可行的。

Application Insights Github上有issue这个resolved