3

我将异常的主体转换为字符串,然后将该异常通过电子邮件发送到 java 中的给定地址。我想用 html 格式化我的异常字符串,使其成为人类可读的格式,类似于它在堆栈溢出时的显示方式。我想知道Java中是否有任何库可以做到这一点?

StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
t.printStackTrace(printWriter);
String body = stringWriter.toString();
//add html to body here
setMessageBody(body);

详细地说,我的意思是用 分隔行<br/>,用不同颜色的字体显示类名,用不同颜色的字体显示行号。这可以通过一些正则表达式来完成,但我想知道是否有一个开箱即用的库。

4

3 回答 3

7

它不做颜色,但一个非常简单的方法是将堆栈跟踪包装在 HTML<pre>元素中。这至少会保留空格和新行。

例如

<pre>
java.lang.ClassCastException: java.lang.Double cannot be cast to java.math.BigDecimal
        at org.hibernate.type.descriptor.java.BigDecimalTypeDescriptor.unwrap(BigDecimalTypeDescriptor.java:36)
        at org.hibernate.type.descriptor.sql.DecimalTypeDescriptor$1.doBind(DecimalTypeDescriptor.java:65)
        at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286)
</pre>
于 2015-08-28T07:28:02.333 回答
1

是的,有几个,它们甚至带有“免费”邮件后端:使用 Java 日志框架,如slf4jlog4j

所有这些框架都可以通过一些配置生成 HTML 电子邮件。一般的做法是这样的:

  • 为所有异常创建一个记录器或为每个类创建一个记录器。前者更容易配置,后者给你更多的自由
  • 向此记录器添加一个附加程序,该记录器被配置为发送电子邮件

如果您不想在您的应用程序中使用日志记录,您可以编写自己的附加程序来重用现有的格式化程序。

于 2012-04-30T09:27:31.190 回答
1

我写了这个,https://github.com/StefanLiebenberg/html-exception-formatter

它是一个将异常格式化为可读 html 的简单实用程序。

String html = new HtmlExceptionFormatter().toString(exception);
于 2016-11-17T01:10:00.617 回答