如何使用 sentry raven-java 客户端设置用户上下文?
我试过添加一个user_email
标签,并添加user_email
到 MDC。它们都按预期工作,标签转到标签,MDC 转到附加数据,但都没有设置哨兵用户上下文。
我还将哨兵与 javascript 和 raven-js 一起使用,这很好用:
Raven.setUserContext({
email: '',
id: ''
});
有java等价物吗?
似乎无法通过 logback 直接发送用户信息。您可以查看 raven-java 的实现:
protected Event buildEvent(ILoggingEvent iLoggingEvent) {
EventBuilder eventBuilder = new EventBuilder()
.withTimestamp(new Date(iLoggingEvent.getTimeStamp()))
.withMessage(iLoggingEvent.getFormattedMessage())
.withLogger(iLoggingEvent.getLoggerName())
.withLevel(formatLevel(iLoggingEvent.getLevel()))
.withExtra(THREAD_NAME, iLoggingEvent.getThreadName());
......
}
用户信息由:withSentryInterface(new UserInterface(...)) 发送,但是我看到这个工具只包含以下代码:StackTraceInterface 和 MessageInterface。我觉得你可以自己加一个。
来自https://github.com/getsentry/raven-java/tree/master/raven-log4j#mapped-tags:
在 appender 中设置地图标签:
log4j.appender.SentryAppender.mappedTags=User,OS
并在运行时设置 MDC:
void logWithExtras() {
// MDC extras
MDC.put("User", "test user");
MDC.put("OS", "Linux");
// This adds a message with extras and MDC keys declared in mappedTags as tags to Sentry
logger.info("This is a test");
}
如果仍然感兴趣,请在启动时运行它(假设在 MDC 上设置了“userid”和“ip”):
Raven.getStoredInstance().addBuilderHelper(eventBuilder -> {
UserInterface userInterface = new UserInterface(MDC.get("userid"), null, MDC.get("ip"), null);
eventBuilder.withSentryInterface(userInterface);
});