如何从errorChannel读取完整的异常堆栈跟踪

时间:2014-10-24 14:06:04

标签: spring-integration

我正在尝试将异常堆栈跟踪保存到数据库以进行某些监视,并且我有以下配置,但它只打印第一行异常消息而不是整个堆栈跟踪,我在这里做错了什么?

<int-jdbc:stored-proc-outbound-gateway 
            id="errorDBLogger"
            data-source="dataSource"
            request-channel="errorChannel" 
            reply-channel="errorSaverepply"
            stored-procedure-name="some_SP "
            ignore-column-meta-data="true">             
            <int-jdbc:sql-parameter-definition .....parameter mappings..
            <int-jdbc:parameter name="errorMessage" expression="payload"/>                                                  
</int-jdbc:stored-proc-outbound-gateway>

此外,我希望默认错误处理机制保持不受影响,因为我也有记录器配置为电子邮件错误,我想保持原样,如果你可以在那种情况下回复。 感谢

1 个答案:

答案 0 :(得分:1)

有效负载为ExceptionThrowable.toString()仅包含类名和消息。

您需要在上游使用转换器或标头扩展器将有效负载转换为堆栈跟踪。

编辑:

要获取堆栈跟踪,您必须调用Throwable.printStackTrace(pw);默认情况下,Throwable.printStackTreace()会写入stderr,因此您需要创建一个PrintWriter来传递。

像...一样的东西。

private String getStackTraceAsString(Throwable cause) {
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter, true);
    cause.printStackTrace(printWriter);
    return stringWriter.getBuffer().toString();
}