如何从堆栈跟踪中获取包数据 [jar 文件名]?
How to get package data [jar file name] from stack trace?
在logback library中,他们有办法得到"stack traces with packaging data"(包和包版本)。
示例:
java.lang.Exception: 99 is invalid
at path.to.MyClass.myFunc(MyClass.java:431) [struts-1.2.9.jar:1.2.9]
如何从堆栈跟踪中的一行中获取“struts-1.2.9.jar
”?
Java 或 Scala 中是否有执行此操作的方法?
String getPackageName(String lineInTrace) {
...
return packageName
}
试试这个
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));
}
方括号中的内容是模块名称和版本,在Java 9及以上。您可以使用 StackTraceElement.getModuleName()
.
获取模块名称
看来如果你不使用模块,使用的是jar文件名而不是模块名。
在logback library中,他们有办法得到"stack traces with packaging data"(包和包版本)。
示例:
java.lang.Exception: 99 is invalid
at path.to.MyClass.myFunc(MyClass.java:431) [struts-1.2.9.jar:1.2.9]
如何从堆栈跟踪中的一行中获取“struts-1.2.9.jar
”?
Java 或 Scala 中是否有执行此操作的方法?
String getPackageName(String lineInTrace) {
...
return packageName
}
试试这个
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));
}
方括号中的内容是模块名称和版本,在Java 9及以上。您可以使用 StackTraceElement.getModuleName()
.
看来如果你不使用模块,使用的是jar文件名而不是模块名。