Skip to content

Instantly share code, notes, and snippets.

@JohnMeyerhoff
Created March 28, 2025 12:51
Show Gist options
  • Select an option

  • Save JohnMeyerhoff/8e069290492058af2e472db28b353720 to your computer and use it in GitHub Desktop.

Select an option

Save JohnMeyerhoff/8e069290492058af2e472db28b353720 to your computer and use it in GitHub Desktop.
package org.relevantpackagename.controller.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class is used to print the relevant stack trace.
*
* <p>Configure by setting {@link #PACKAGENAME} to the package name you want to focus on.
*
* <p>This is useful for debugging purposes.
*
* @author John Meyerhoff
*/
public class StackFocus {
private static final CharSequence PACKAGENAME = "org.relevantpackagename";
private StackFocus() {
throw new IllegalStateException("Utility class");
}
public static void printRelevantStack() {
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
Logger logger = LoggerFactory.getLogger(StackFocus.class);
filterStackTrace(stackTraceElements, logger::info);
}
public static void filterStackTrace(StackTraceElement[] stackTraceElements, boolean warn) {
Logger logger = LoggerFactory.getLogger(StackFocus.class);
filterStackTrace(stackTraceElements, warn ? logger::warn : logger::info);
}
private static void filterStackTrace(
StackTraceElement[] stackTraceElements, java.util.function.BiConsumer<String, Object> log) {
log.accept("Relevant stack:\n", null);
for (int i = 1; i < stackTraceElements.length; i++) {
StackTraceElement stackTraceElement = stackTraceElements[i];
if (stackTraceElement.getClassName().contains(PACKAGENAME)) {
log.accept(i + ": {}", stackTraceElement);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment