【发布时间】:2014-04-04 14:55:57
【问题描述】:
我有很长的异常层次结构,其中之一添加带有二进制数据的长消息。我不能在扔的地方改变它,因为它在图书馆里。如何在不丢失其他异常消息的情况下截断它?
代码示例:
throw new RuntimeException("msg",
new RuntimeException(generateLongErrorMessage(),
new RuntimeException("short message",
new RuntimeException("important message"))
)
);
想要的输出:
Exception in thread "main" java.lang.RuntimeException: msg
at xxx.excpetionMessageTruncator(Erofeev.java:18)
at xxx.main(Erofeev.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.RuntimeException: long message long message ...(truncated, original size: 100)
... 7 more
Caused by: java.lang.RuntimeException: short message
... 7 more
Caused by: java.lang.RuntimeException: important message
... 7 more
【问题讨论】:
-
你在哪里发现了这个异常?
-
@radai,在我该死的企业项目中
-
我的目标非常类似于下面 mbred 所说的 - 如果您知道它捕获的代码位置,您可以重建异常并删除长消息,只需“剥离”外层和只留下根本原因。您唯一的其他选择是自定义记录器/附加器