堆栈跟踪通常会从长类路径中变得如此冗长,以至于它们非常难以阅读。这是一个例子:
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) No implementation for
Set<ItemManipulator<Cat>> annotated with @Assisted(value=) was bound.
while locating Set<ItemManipulator<Cat>> annotated with @Assisted(value=)
...
我首先将其称为Guice-specific question,但意识到它一般适用于堆栈跟踪。有没有办法配置Java或Eclipse本地执行此操作?如果没有,是否有插件甚至外部工具来实现这一目标?
答案 0 :(得分:2)
您可以设置默认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);
}
});
答案 1 :(得分:0)
要生成更具可读性的跟踪,请将堆栈跟踪粘贴到Notepad ++和以下正则表达式中。同样的表达式也可以用在脚本语言中。
我将跟踪粘贴到Notepad++并使用以下搜索和替换设置。
搜索模式:\w[a-z\d_\.]+\.([A-Z][A-Za-z\d_]*)
替换为:\1
搜索设置:match case
已启用,Regular expression
搜索模式。
答案 2 :(得分:0)
如果您使用logback,那么您可以使用布局以您喜欢的任何方式输出日志 http://logback.qos.ch/manual/layouts.html
将类似java.lang.String的类输出为j.l.String在堆栈跟踪中非常常见