diff --git a/src/main/java/com/google/devtools/build/lib/profiler/BUILD b/src/main/java/com/google/devtools/build/lib/profiler/BUILD
index e764016..9c77784 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/profiler/BUILD
@@ -25,6 +25,7 @@
         "TimeSeries.java",
     ],
     deps = [
+        "//src/main/java/com/google/devtools/build/lib/bugreport",
         "//src/main/java/com/google/devtools/build/lib/clock",
         "//src/main/java/com/google/devtools/build/lib/collect:extrema",
         "//src/main/java/com/google/devtools/build/lib/concurrent",
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java b/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java
index 74cb7cc..6fdf14c 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java
@@ -17,13 +17,13 @@
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Stopwatch;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.errorprone.annotations.concurrent.GuardedBy;
 import com.sun.management.OperatingSystemMXBean;
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryMXBean;
 import java.time.Duration;
 import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
 
 /** Thread to collect local resource usage data and log into JSON profile. */
 public class CollectLocalResourceUsage extends Thread {
@@ -31,7 +31,7 @@
   private static final Duration BUCKET_DURATION = Duration.ofSeconds(1);
   private static final long LOCAL_CPU_SLEEP_MILLIS = 200;
 
-  private final Consumer<Exception> bugReporter;
+  private final BugReporter bugReporter;
 
   private volatile boolean stopLocalUsageCollection;
   private volatile boolean profilingStarted;
@@ -44,7 +44,7 @@
 
   private Stopwatch stopwatch;
 
-  CollectLocalResourceUsage(Consumer<Exception> bugReporter) {
+  CollectLocalResourceUsage(BugReporter bugReporter) {
     this.bugReporter = checkNotNull(bugReporter);
   }
 
@@ -81,7 +81,7 @@
                 + memoryBean.getNonHeapMemoryUsage().getUsed();
       } catch (IllegalArgumentException e) {
         // The JVM may report committed > max. See b/180619163.
-        bugReporter.accept(e);
+        bugReporter.sendBugReport(e);
         memoryUsage = -1;
       }
 
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java b/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
index e52a593..7ab40ff 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
@@ -21,6 +21,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.clock.Clock;
 import com.google.devtools.build.lib.collect.Extrema;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
@@ -48,7 +49,6 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.GZIPOutputStream;
@@ -371,7 +371,7 @@
       boolean includePrimaryOutput,
       boolean includeTargetLabel,
       boolean collectTaskHistograms,
-      Consumer<Exception> bugReporter)
+      BugReporter bugReporter)
       throws IOException {
     Preconditions.checkState(!isActive(), "Profiler already active");
     initHistograms();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 56a27e7..04e08cc 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -405,7 +405,7 @@
             options.includePrimaryOutput,
             options.profileIncludeTargetLabel,
             options.alwaysProfileSlowOperations,
-            bugReporter::sendBugReport);
+            bugReporter);
         // Instead of logEvent() we're calling the low level function to pass the timings we took in
         // the launcher. We're setting the INIT phase marker so that it follows immediately the
         // LAUNCH phase.
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
index 5fa6138..6f5a54b 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
@@ -314,7 +314,7 @@
               /*includePrimaryOutput=*/ false,
               /*includeTargetLabel=*/ false,
               /*collectTaskHistograms=*/ true,
-              runtime.getBugReporter()::sendBugReport);
+              runtime.getBugReporter());
 
       StoredEventHandler storedEventHandler = new StoredEventHandler();
       reporter.addHandler(storedEventHandler);
diff --git a/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java b/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java
index 414d232..5ccee2e 100644
--- a/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java
@@ -22,7 +22,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.bugreport.BugReport;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.clock.BlazeClock;
 import com.google.devtools.build.lib.clock.Clock;
 import com.google.devtools.build.lib.clock.JavaClock;
@@ -105,7 +105,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     return buffer;
   }
 
@@ -124,7 +124,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
   }
 
   @Test
@@ -231,7 +231,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     try (SilentCloseable c = profiler.profile(ProfilerTask.ACTION, "action task")) {
       // Next task takes less than 10 ms but should be recorded anyway.
       long before = clock.nanoTime();
@@ -281,7 +281,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     profiler.logSimpleTask(10000, 20000, ProfilerTask.VFS_STAT, "stat");
     // Unlike the VFS_STAT event above, the remote execution event will not be recorded since we
     // don't record the slowest remote exec events (see ProfilerTask.java).
@@ -402,7 +402,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     profiler.logSimpleTask(10000, 20000, ProfilerTask.VFS_STAT, "stat");
 
     assertThat(ProfilerTask.VFS_STAT.collectsSlowestInstances()).isTrue();
@@ -594,7 +594,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     profiler.logSimpleTask(badClock.nanoTime(), ProfilerTask.INFO, "some task");
     profiler.stop();
   }
@@ -653,7 +653,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     profiler.logSimpleTaskDuration(
         Profiler.nanoTimeMaybe(), Duration.ofSeconds(10), ProfilerTask.INFO, "foo");
     IOException expected = assertThrows(IOException.class, profiler::stop);
@@ -682,7 +682,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     profiler.logSimpleTaskDuration(
         Profiler.nanoTimeMaybe(), Duration.ofSeconds(10), ProfilerTask.INFO, "foo");
     IOException expected = assertThrows(IOException.class, profiler::stop);
@@ -707,7 +707,7 @@
         /*includePrimaryOutput=*/ true,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     try (SilentCloseable c = profiler.profileAction(ProfilerTask.ACTION, "test", "foo.out", "")) {
       profiler.logEvent(ProfilerTask.PHASE, "event1");
     }
@@ -740,7 +740,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ true,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     try (SilentCloseable c =
         profiler.profileAction(ProfilerTask.ACTION, "test", "foo.out", "//foo:bar")) {
       profiler.logEvent(ProfilerTask.PHASE, "event1");
@@ -772,7 +772,7 @@
         /*includePrimaryOutput=*/ false,
         /*includeTargetLabel=*/ false,
         /*collectTaskHistograms=*/ true,
-        BugReport::sendBugReport);
+        BugReporter.defaultInstance());
     long curTime = Profiler.nanoTimeMaybe();
     for (int i = 0; i < 100_000; i++) {
       Duration duration;
