8

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

我试过添加一个user_email标签,并添加user_email到 MDC。它们都按预期工作,标签转到标签,MDC 转到附加数据,但都没有设置哨兵用户上下文。

我还将哨兵与 javascript 和 raven-js 一起使用,这很好用:

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

有java等价物吗?

4

3 回答 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。我觉得你可以自己加一个。

于 2016-12-16T12:01:01.583 回答
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");
}
于 2015-02-09T05:21:13.463 回答
0

如果仍然感兴趣,请在启动时运行它(假设在 MDC 上设置了“userid”和“ip”):

Raven.getStoredInstance().addBuilderHelper(eventBuilder -> {
  UserInterface userInterface = new UserInterface(MDC.get("userid"), null, MDC.get("ip"), null);
  eventBuilder.withSentryInterface(userInterface);
});
于 2017-02-03T08:37:18.237 回答