log4j 如何从堆栈跟踪中获取包数据[jar文件名]?

b09cbbtk  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(148)

logback library中,它们有一种方法来获取“带有打包数据的堆栈跟踪”(包和包版本)。
示例:

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
}
mznpcxlj

mznpcxlj1#

试试这个

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));
}
k4emjkb1

k4emjkb12#

在Java9及更高版本中,方括号中的内容是模块名称和版本,可以使用StackTraceElement.getModuleName()获得模块名称。
如果您没有使用模块,则似乎会使用jar文件名而不是模块名。

相关问题