Sentry raven-java用户上下文

8

如何使用sentry raven-java客户端设置用户上下文?

我尝试添加一个user_email标签,并将user_email添加到MDC中。它们都按预期工作,标签进入标签,而MDC进入附加数据,但是两者都无法设置sentry用户上下文。

我还使用raven-js的javascript与sentry,这很不错:

Raven.setUserContext({
    email: '',
    id: ''
});

有没有 Java 的等价物?

请参见 https://github.com/getsentry/raven-java/issues/110 - 从5.1.0开始,您可以添加一个 new UserInterface(id, username, ipAddress, email) - Alden
3个回答

1

似乎不能直接通过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 的代码。我认为你可以自己添加一个。

0

来自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");
}

我们如何传递用户ID、用户名和电子邮件,以便其与客户端的工作方式相同? - Adam Lane

0
如果还有兴趣,在启动时运行以下代码(假设 MDC 上的 "userid" 和 "ip" 已设置):
Raven.getStoredInstance().addBuilderHelper(eventBuilder -> {
  UserInterface userInterface = new UserInterface(MDC.get("userid"), null, MDC.get("ip"), null);
  eventBuilder.withSentryInterface(userInterface);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接