Advanced Usage

When any SLF4J implementation supporting MDC is on the classpath (for example Logback, Log4j2), it’s possible to add extra data to events thanks to the MDC system.

Mapped Tags

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.

In Practice

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

Context Tags

Since Sentry 6.0.0, it is possible to define a list of MDC tags that will show up as Tags in the Sentry UI. MDC Tags not in this list are shown as Context Data in the UI, just like before. To define such tags add a context-tags entry with the tags as comma seperated items to the sentry.properties file.

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

When calling MDC.put("userId", "myUserId") with 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!) to suggesting an update ("yeah, this would be better").