All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.republicate.slf4j.impl.StackTraceStripper Maven / Gradle / Ivy

package com.republicate.slf4j.impl;


import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.NavigableSet;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;

/**
 * 

Utility to strip out unwanted packages from throwables stack traces, so that you only get the pith and marrow lines of logs in you error logs.

*

Default filtered packages:

*
    *
  • java
  • *
  • javax
  • *
  • com.mysql
  • *
  • org.apache
  • *
  • org.codehaus
  • *
  • org.eclipse
  • *
  • org.postgresql
  • *
  • sun
  • *
*/ public class StackTraceStripper implements Serializable { private NavigableSet unwantedPackages = new TreeSet<>(); private static NavigableSet defaultUnwantedPackages = new TreeSet<>(); static { // packages don't have to end with '.', but it avoids potential false positives defaultUnwantedPackages.add("java."); defaultUnwantedPackages.add("javax."); defaultUnwantedPackages.add("com.mysql."); defaultUnwantedPackages.add("org.apache."); defaultUnwantedPackages.add("org.codehaus."); defaultUnwantedPackages.add("org.eclipse."); defaultUnwantedPackages.add("org.postgresql."); defaultUnwantedPackages.add("sun."); defaultUnwantedPackages.add("jdk."); } public StackTraceStripper() { this(defaultUnwantedPackages); } public StackTraceStripper(Collection unwantedPackages) { this.unwantedPackages.addAll(unwantedPackages); } public StackTraceStripper(String unwantedPackages) { this.unwantedPackages.addAll(Arrays.asList(unwantedPackages.split("\\s*,\\s*"))); } public void strip(Throwable throwable) { // avoid self-reference Set seen = new HashSet<>(); while (throwable != null) { stripStackTrace(throwable); seen.add(throwable); throwable = throwable.getCause(); if (seen.contains(throwable)) { throwable = null; } } } private void stripStackTrace(Throwable throwable) { StackTraceElement stackTrace[] = throwable.getStackTrace(); if (stackTrace == null) { return; } stackTrace = Arrays.stream(stackTrace) .filter(element -> { String className = element.getClassName(); String lowerBound = element == null ? null : unwantedPackages.lower(className); return lowerBound == null || !className.startsWith(lowerBound); }) .collect(Collectors.toList()) .toArray(new StackTraceElement[0]); throwable.setStackTrace(stackTrace); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy