2016-04-16 9 views
0

In der logback library haben sie eine Möglichkeit, "Stack-Traces mit Verpackungsdaten" (Paket- und Paketversionen) zu erhalten.Wie erhalten Sie Paketdaten [JAR-Dateiname] von Stack-Trace?

Beispiel:

java.lang.Exception: 99 is invalid 
    at path.to.MyClass.myFunc(MyClass.java:431) [struts-1.2.9.jar:1.2.9] 

Wie kann ich "struts-1.2.9.jar" von einer Linie in einer Stack-Trace erhalten?

Gibt es eine Methode in Java oder Scala, die das tut?

String getPackageName(String lineInTrace) { 
    ... 
    return packageName 
} 
+0

P. S. Ich habe Code wie diesen online gesehen und dann habe ich ihn verloren. –

+0

Siehe [Ermitteln, aus welcher JAR-Datei eine Klasse stammt] (http://stackoverflow.com/questions/1983839/determine-which-jar-file-a-class-is-from) – saka1029

Antwort

1

Versuchen Sie, diese

for (StackTraceElement el : e.getStackTrace()) { 
    Class<?> clazz = Class.forName(el.getClassName()); 
    String location = clazz.getProtectionDomain().getCodeSource().getLocation().toString(); 
    System.out.println(location.substring(location.lastIndexOf('/') +1)); 
}