let*_*tie 5 javascript sentry reactjs next.js
我一直在尝试将用户数据设置到 Sentry 的全局范围内,因此每次出现错误或事件时,用户信息都会传递给它。
我的应用程序是在 Next.js 中构建的,因此我很自然地添加了 Sentry 的 Next.js 文档中的配置。
我不知道在哪里添加 Sentry.setUser({id: user.Id}) 方法以使其全局设置用户。
到目前为止,我已将其添加到 Sentry 的 _error.js 文件中的 getInitialProps 方法中:
import NextErrorComponent from 'next/error';
import * as Sentry from '@sentry/nextjs';
import { getUser } from '../lib/session';
const MyError = ({ statusCode, hasGetInitialPropsRun, err }) => {
if (!hasGetInitialPropsRun && err) {
Sentry.captureException(err);
}
return <NextErrorComponent statusCode={statusCode} />;
};
MyError.getInitialProps = async (context) => {
const errorInitialProps = await NextErrorComponent.getInitialProps(context);
const { req, res, err, asPath } = context;
errorInitialProps.hasGetInitialPropsRun = true;
const user = await getUser(req, res);
// Set user information
if (user) {
console.log('Setting user');
Sentry.setUser({ id: user.Id });
}
else {
console.log('Removing user');
Sentry.configureScope(scope => scope.setUser(null));
}
if (res?.statusCode === 404) {
return errorInitialProps;
}
if (err) {
Sentry.captureException(err);
await Sentry.flush(2000);
return errorInitialProps;
}
Sentry.captureException(
new Error(`_error.js getInitialProps missing data at path: ${asPath}`),
);
await Sentry.flush(2000);
return errorInitialProps;
};
export default MyError;
Run Code Online (Sandbox Code Playgroud)
但是当尝试记录错误时,Sentry 中不显示用户信息,仅显示默认用户 ip:
我也尝试过登录成功后设置用户,但仍然没有任何结果。
感谢帮助!
小智 3
不确定这是否是正确的方法,但上述解决方案对我不起作用。所以我尝试在内部调用 setUser _app.tsx。
import { useEffect } from "react";
import { setUser } from "@sentry/nextjs";
import { UserProvider, useUser } from "@auth0/nextjs-auth0";
import type { AppProps } from "next/app";
function SentryUserManager() {
const { user } = useUser();
useEffect(() => {
if (user) {
setUser({
email: user.email ?? undefined,
username: user.name ?? undefined,
});
} else {
setUser(null);
}
}, [user]);
return null;
}
export default function MyApp({ Component, pageProps }: AppProps) {
return (
<UserProvider>
<Component {...pageProps} />
<SentryUserManager />
</UserProvider>
);
}
Run Code Online (Sandbox Code Playgroud)
仍然不确定为什么这对我有用而其他解决方案却不起作用,但认为值得分享。
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |