Advanced Usage

You can add extra data to events using the MDC system for any SLF4J implementation supporting MDC that's on a classpath, (for example Logback, Log4j2, JUL).

Copied
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.30</version>
</dependency>

By default all MDC parameters are stored under the “MDC” tab in Sentry.

Copied
import java.util.logging.Level;
import org.slf4j.MDC;

void logWithExtras() {
  // MDC extras
  MDC.put("Environment", "Development");
  MDC.put("OS", "Linux");

  // This sends an event where the Environment and OS MDC values are set as MDC entries
  logger.log(Level.SEVERE, "This is a test");
}

Note that MDC manages data on a per-thread basis, and that a child thread does not automatically inherit MDC properties from its parent.

Copied
import io.sentry.Sentry;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.slf4j.MDC;

public class MyClass {
  private final Logger logger = Logger.getLogger(MyClass.class.getName());

  void logSimpleMessage() {
    // This sends a simple event to Sentry
    logger.severe("This is a test");
  }

  void logWithBreadcrumbs() {
    // Record a breadcrumb that will be sent with the next event(s),
    // by default the last 100 breadcrumbs are kept.
    Sentry.addBreadcrumb("User made an action");

    // Log entries below `minimumEventLevel` and above or equal to `minimumBreadcrumbLevel`
    // are recorded as breadcrumbs
    logger.info("User made another action");

    // This sends a simple event to Sentry
    logger.severe("This is a test");
  }

  void logWithExtras() {
    // MDC extras
    MDC.put("extra_key", "extra_value");
    // This sends an event with extra data to Sentry
    logger.severe("This is a test");
  }

  void logException() {
    try {
      unsafeMethod();
    } catch (Exception e) {
      // This sends an exception event to Sentry
      logger.log(Level.SEVERE, "Exception caught", e);
    }
  }

  void unsafeMethod() {
    throw new UnsupportedOperationException("You shouldn't call this!");
  }
}

Starting with Sentry version 6.0.0 and up, you can define a list of MDC tags that will be viewable as Tags in the Sentry UI. MDC Tags not in this list will be viewable as Context Data. To define tags, add a context-tags entry with the tags as comma-separated items to the sentry.properties file.

Copied
dsn=https://examplePublicKey@o0.ingest.sentry.io/0
context-tags=userId,requestId

When you call MDC.put("userId", "myUserId") with the above configuration in place, the userId will show up as a tag on the event in the Sentry UI.

Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").