Java 如何在堆栈跟踪中隐藏长类路径以使其可读?
堆栈跟踪通常会从长类路径中变得非常冗长,以至于读取它们非常痛苦。下面是一个例子:Java 如何在堆栈跟踪中隐藏长类路径以使其可读?,java,eclipse,debugging,stack-trace,readability,Java,Eclipse,Debugging,Stack Trace,Readability,堆栈跟踪通常会从长类路径中变得非常冗长,以至于读取它们非常痛苦。下面是一个例子: 1) No implementation for java.util.Set< com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview. helpers.databaseitem.itemmanipulators.ItemManipulator< com.mydomain.myapp.flash.
1) No implementation for java.util.Set<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.
helpers.databaseitem.itemmanipulators.ItemManipulator<
com.mydomain.myapp.flash.Cat>> annotated with
@com.google.inject.assistedinject.Assisted(value=) was bound.
while locating
java.util.Set<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.
helpers.databaseitem.itemmanipulators.ItemManipulator<
com.mydomain.myapp.flash.Cat>> annotated with
@com.google.inject.assistedinject.Assisted(value=)
1)java.util.Set没有实现<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview。
helpers.databaseitem.ItemManipulator.ItemManipulator<
com.mydomain.myapp.flash.Cat>>注释为
@已绑定com.google.inject.assistedinject.Assisted(值=)。
定位时
java.util.Set<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview。
helpers.databaseitem.ItemManipulator.ItemManipulator<
com.mydomain.myapp.flash.Cat>>注释为
@com.google.inject.assistedinject.assided(值=)
如果我可以修剪类路径,只显示类名和方法,它将如下所示:
1) No implementation for
Set<ItemManipulator<Cat>> annotated with @Assisted(value=) was bound.
while locating Set<ItemManipulator<Cat>> annotated with @Assisted(value=)
1)没有实现
已绑定用@Assisted(value=)注释的集。
查找用@Assisted(value=)注释的集时
我第一次问这个问题是作为一个例子,但意识到它通常适用于堆栈跟踪。有没有办法将Java或Eclipse配置为本机执行此操作?如果没有,是否有插件或外部工具来完成此任务?要生成更可读的跟踪,请将堆栈跟踪粘贴到Notepad++和以下正则表达式中。同样的表达式也可以在脚本语言中使用 我将跟踪粘贴到并使用以下搜索和替换设置 搜索模式:
\w[a-z\d\u\.]+.([a-z][a-Za-z\d\u]*)
替换为:\1
搜索设置:
匹配大小写
已启用,正则表达式
搜索模式。如果使用logback,则可以使用layout以任何方式输出日志
将java.lang.String之类的类输出为j.l.String在堆栈跟踪中非常常见您可以设置默认的
UncaughtExceptionHandler
并在打印到System.err
之前修改堆栈跟踪。您可能需要使用正则表达式,但这将起作用:
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
e.printStackTrace(ps);
String withoutClasspaths = baos.toString().replaceAll("(\\w+\\.){2,}(\\w*)", "$2");
System.err.println(withoutClasspaths);
}
});