使用最新的 Javascript 代码段时如何调用 addTelemetryInitializer?

Sim*_*ell 6 azure azure-application-insights

我正在尝试为网页浏览事件自定义名称属性

之前有人问过这个问题,例如如何为 Azure App Insights 中的页面视图事件提供自定义名称?

但是这个和我发现的所有其他解决方案(以及 Microsoft 文档)都使用旧版本的 javascript 代码段,形式为

window.appInsights = appInsights;
// …
appInsights.trackPageView();
Run Code Online (Sandbox Code Playgroud)

来自门户的当前片段虽然非常不同

var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var // ...
{
     instrumentationKey:"key"
}); window[aiName] = aisdk,aisdk.queue && aisdk.queue.length ===0 && aisdk.trackPageView({});
Run Code Online (Sandbox Code Playgroud)

我试过这种事情

var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var aiName=window[sdkInstance],aisdk=window[aiName]||function(e){function n(e){t[e]=function(){var n=arguments;t.queue.push(function(){t[e].apply(t,n)})}}var t={config:e};t.initialize=!0;var i=document,a=window;setTimeout(function(){var n=i.createElement("script");n.src=e.url||"https://az416426.vo.msecnd.net/scripts/b/ai.2.min.js",i.getElementsByTagName("script")[0].parentNode.appendChild(n)});try{t.cookie=i.cookie}catch(e){}t.queue=[],t.version=2;for(var r=["Event","PageView","Exception","Trace","DependencyData","Metric","PageViewPerformance"];r.length;)n("track"+r.pop());n("startTrackPage"),n("stopTrackPage");var s="Track"+r[0];if(n("start"+s),n("stop"+s),n("setAuthenticatedUserContext"),n("clearAuthenticatedUserContext"),n("flush"),!(!0===e.disableExceptionTracking||e.extensionConfig&&e.extensionConfig.ApplicationInsightsAnalytics&&!0===e.extensionConfig.ApplicationInsightsAnalytics.disableExceptionTracking)){n("_"+(r="onerror"));var o=a[r];a[r]=function(e,n,i,a,s){var c=o&&o(e,n,i,a,s);return!0!==c&&t["_"+r]({message:e,url:n,lineNumber:i,columnNumber:a,error:s}),c},e.autoExceptionInstrumented=!0}return t}(
{
  instrumentationKey:"my-key"
}); window[aiName] = aisdk;
if (aisdk.queue && 0 !== aisdk.queue.length) {
  function adjustPageName(item) {
        var name = item.name.replace("AppName", "");

        if (name.indexOf("Order") !== -1)
            return "Order";

        if (name.indexOf("Product") !== -1)
            return "Shop";

        // And so on...
        return name;
    }

    // Add telemetry initializer
    aisdk.queue.push(function () {
        aisdk.context.addTelemetryInitializer(function (envelope) {
            var telemetryItem = envelope.data.baseData;
            // To check the telemetry item’s type:
            if (envelope.name === Microsoft.ApplicationInsights.Telemetry.PageView.envelopeType || envelope.name === Microsoft.ApplicationInsights.Telemetry.PageViewPerformance.envelopeType) {

                // Do not track admin pages
                if (telemetryItem.name.indexOf("Admin") !== -1)
                    return false;

                telemetryItem.name = adjustPageName(telemetryItem);
            }

        });
    });
  aisdk.trackPageView();
};
Run Code Online (Sandbox Code Playgroud)

但它不起作用(没有错误,但对遥测也没有影响)

有没有人使用新的代码段设法使这样的工作?

Iva*_*ang 7

请尝试下面的代码,我可以使用最新的 javascript 代码片段添加自定义属性:

var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var aiName=window[sdkInstance],aisdk=window[aiName]||function(e){function n(e) { t[e] = function () { var n = arguments; t.queue.push(function () { t[e].apply(t, n) }) } }var t={config: e};t.initialize=!0;var i=document,a=window;setTimeout(function(){var n=i.createElement("script");n.src=e.url||"https://az416426.vo.msecnd.net/scripts/b/ai.2.min.js",i.getElementsByTagName("script")[0].parentNode.appendChild(n)});try{t.cookie = i.cookie}catch(e){}t.queue=[],t.version=2;for(var r=["Event","PageView","Exception","Trace","DependencyData","Metric","PageViewPerformance"];r.length;)n("track"+r.pop());n("startTrackPage"),n("stopTrackPage");var s="Track"+r[0];if(n("start"+s),n("stop"+s),n("setAuthenticatedUserContext"),n("clearAuthenticatedUserContext"),n("flush"),!(!0===e.disableExceptionTracking||e.extensionConfig&&e.extensionConfig.ApplicationInsightsAnalytics&&!0===e.extensionConfig.ApplicationInsightsAnalytics.disableExceptionTracking)){n("_" + (r = "onerror")); var o=a[r];a[r]=function(e,n,i,a,s){var c=o&&o(e,n,i,a,s);return!0!==c&&t["_"+r]({message: e,url:n,lineNumber:i,columnNumber:a,error:s}),c},e.autoExceptionInstrumented=!0}return t}(
    {
        instrumentationKey: "xxxxxxxxxx"
    }
); window[aiName] = aisdk, aisdk.queue && 0 === aisdk.queue.length;
// Add telemetry initializer
aisdk.queue.push(function () {
    var telemetryInitializer = (envelope) => {
        //Add a custom property
        envelope.data.name = 'This item passed through my telemetry initializer';
    };
    appInsights.addTelemetryInitializer(telemetryInitializer);
});
aisdk.trackPageView({})
Run Code Online (Sandbox Code Playgroud)

然后在 azure 门户中,添加自定义属性:

在此处输入图片说明

  • 谢谢。看起来语法已从 appInsights.context.addTelemetryInitializer 更改为 appInsights.addTelemetryInitializer 一些更多的试验和错误告诉我,envelope.data.baseData 现在是envelope.baseData 我想知道还有什么发生了变化,以及它是否记录在任何地方...... (3认同)