You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Web应用如何将控制台JS异常记录到Application Insights

解决.NET 6 Web应用中JS异常无法记录到Application Insights的问题

问题核心

当前配置仅完成了服务器端的Application Insights集成(NLog日志、SQL依赖追踪),前端JS异常需要单独配置Application Insights JavaScript SDK才能捕获,这是服务器端SDK覆盖不到的范围。你提到的控制台错误,大概率是JS SDK未正确引入或配置导致的。

解决方案步骤

1. 引入并配置Application Insights JavaScript SDK

在你的布局页面(如_Layout.cshtml)的</body>标签前添加以下代码,替换为你的Application Insights连接字符串(可从Azure门户获取):

<script type="text/javascript">
!function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"7",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++){var i=n[a].split("=");2===i.length&&(e[i[0][b]()]=i[1])}if(!e[C]){var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")}return e}(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=v(c,"Exception")).data.baseData.exceptions=[{typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHost: "+(S&&S.pathname||"_unknown_"),parsedStack:[]}],o.data.baseData.properties={endpoint:i}),l),function(e,t){if(JSON){var n=T.fetch;if(n&&!y.useXhr)n(t,{method:N,body:JSON.stringify(e),mode:"cors"});else if(XMLHttpRequest){var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))}}}(l,p))}function i(e,t){f||setTimeout(function(){!g&&t&&y.onError&&y.onError(e)},500)}var r=function(e,t){n=function(){var n,a={},i=T.scriptElement||k;for(n in t)a[n]=t[n];a.src=e;var r=T.createElement(i);if(r){for(n in a)r[n]=a[n];r.onerror=i(r.src),r.onload=i(r.src,1),T.getElementsByTagName("head")[0].appendChild(r)}};return n}();r(h,{onload:function(){var e=T[t];if(e.initialize)e.initialize(m.config);else{var n=function(e){var t={},n="Browser";return t[E+"id"]=n[b](),t[E+"type"]=n,t}(d);y.queue&&0===y.queue.length&&y.queue.push(function(){e.context.addTelemetryInitializer(function(t){t.tags||(t.tags={});t.tags["ai.device.id"]=n["ai.device.id"],t.tags["ai.device.type"]=n["ai.device.type"]})})}},onerror:a,crossOrigin:"anonymous"})}return m}(window,document,{
src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js",
// 替换为你的Application Insights连接字符串
connectionString: "YOUR_CONNECTION_STRING_HERE"
});
window.appInsights=appInsights;
// 启用自动捕获异常(包括控制台错误)
appInsights.loadAppInsights();
appInsights.config.disableExceptionTracking = false;
// 手动捕获未处理的Promise拒绝(可选)
window.addEventListener("unhandledrejection", function(event) {
    appInsights.trackException({ exception: event.reason, severityLevel: 3 });
});
</script>

2. 验证服务器端配置兼容性

确保appsettings.json中正确配置了Application Insights连接字符串,服务器端会自动读取该配置:

{
  "ApplicationInsights": {
    "ConnectionString": "YOUR_CONNECTION_STRING_HERE"
  }
}

你现有的服务器端配置services.AddApplicationInsightsTelemetry();无需额外修改。

3. 排查控制台错误

你遇到的控制台错误,常见原因及修复:

  • 连接字符串错误:确认JS SDK中填入的连接字符串与服务器端一致,且在Azure门户中有效。
  • CORS问题:默认情况下Application Insights ingestion端点允许所有域名访问,若部署在特殊环境,需检查域名访问权限。
  • SDK版本不兼容:使用上述CDN链接的稳定版JS SDK,避免与服务器端SDK版本差异过大。

4. 测试异常捕获

在前端页面添加测试按钮触发异常,验证是否能被捕获:

<button onclick="throw new Error('Test JS Exception')">触发测试异常</button>

点击后等待几分钟,登录Azure门户查看Application Insights的异常面板,即可看到测试记录。

关键提示

  • 前端JS异常捕获完全依赖Application Insights JavaScript SDK,服务器端SDK无法直接捕获前端错误。
  • 若使用Webpack等打包工具,也可通过npm安装@microsoft/applicationinsights-web包,在入口文件中初始化SDK,效果与CDN方式一致。

内容的提问来源于stack exchange,提问作者Lucky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:37:28