如何在java中从异常stackTrace获取特定包

如何在java中从异常stackTrace获取特定包,java,exception,stack-trace,Java,Exception,Stack Trace,我只想打印异常stackTrace中的特定包。如何做到这一点 例如,考虑下面的StActTrace com.mongodb.MongoInternalException: DBPort.findOne failed at com.mongodb.DBPort.findOne(DBPort.java:153) at com.mongodb.DBPort.runCommand(DBPort.java:159) at com.mongodb.DBTCPConnector.tes

我只想打印异常stackTrace中的特定包。如何做到这一点

例如,考虑下面的StActTrace

com.mongodb.MongoInternalException: DBPort.findOne failed
    at com.mongodb.DBPort.findOne(DBPort.java:153)
    at com.mongodb.DBPort.runCommand(DBPort.java:159)
    at com.mongodb.DBTCPConnector.testMaster(DBTCPConnector.java:371)

    at com.myapp.foo.MongoConnection.java:10
    at com.myapp.foo.MongoConnection.java:27

我只想打印stackTrace中带有行号和方法名的包“com.myapp.foo”

这样的东西怎么样:

try {
  throw new RuntimeException();
}
catch (RuntimeException e) {
  StackTraceElement[] stackTrace = e.getStackTrace();

  for (StackTraceElement stackTraceElement : stackTrace) {
    String className = stackTraceElement.getClassName();
    int pos = className.lastIndexOf('.');
    String packageName = className.substring(0, pos);
    System.out.println("Package:" + packageName +
        ", method: "+ stackTraceElement.getMethodName() +
        ", line:" + stackTraceElement.getLineNumber());
  }
}

当然,您可以添加所需的任何自定义包过滤。

您是否捕获到异常并只想打印stacktrace的一部分?有关这方面的更多信息适合您的应用程序。异常提供getStackTrace方法。或者您可以编写自己的异常并覆盖printStackTrace方法。你为什么要这样做?是的,我抓住了例外。我也尝试了java.lang.StackTraceeElement,但我不想从exception.getStackTrace()迭代这个数组,我会继续迭代
StackTraceeElement
数组或类似的东西。我使用
printStackTrace(PrintStream s)
和过滤流做了类似的事情。没有迭代这个StackTraceElement的其他方法吗?