如何通过New Relic浏览器监控上报Next.js服务器错误日志?脚本安装能否用noticeError?
New Relic脚本安装下的错误上报问题解答
核心结论
通过浏览器脚本安装的New Relic仅能在客户端环境使用newrelic.noticeError(err),服务器端无法通过这种方式上报错误。
问题原因拆解
- 你当前代码的服务器端分支(
typeof window == "undefined")里用require("newrelic"),但这个调用依赖New Relic的Node.js服务器端SDK,和你通过脚本安装的浏览器监控不是同一个东西。如果没在服务器端安装配置对应SDK,这段代码要么报错,要么完全不生效。 - 浏览器脚本只会在客户端的
window对象上挂载newrelic实例,服务器端没有这个全局对象,自然无法调用相关方法。
修正方案
服务器端错误上报配置
要捕获上报服务器端错误,必须单独安装New Relic Node.js SDK:npm install newrelic然后在项目根目录创建
newrelic.js配置文件,填入你的license key等服务器端配置信息。修正Error组件代码
确保服务器端SDK配置完成后,调整代码(注意删除多余的语法错误字符):Error.getInitialProps = ({ res, err }) => { console.log("statusCode err", res, err); if (typeof window == "undefined") { // 仅在服务器端SDK安装配置完成后,这段代码才有效 const newrelic = require("newrelic"); newrelic.noticeError(err); } else { // 客户端依赖脚本安装的New Relic,这段代码有效 window.newrelic.noticeError(err); } const statusCode = res ? res.statusCode : err ? err.statusCode : 404; return { statusCode }; }; export default Error;验证客户端上报
客户端分支的window.newrelic.noticeError(err)是有效的,只要你正确在页面中加载了New Relic浏览器脚本,就能捕获上报客户端错误。
内容的提问来源于stack exchange,提问作者Brijesh Verma
相关产品推荐
相关产品推荐

