我正在尝试将异常堆栈跟踪保存到数据库以进行某些监视,并且我有以下配置,但它只打印第一行异常消息而不是整个堆栈跟踪,我在这里做错了什么?
<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>
此外,我希望默认错误处理机制保持不受影响,因为我也有记录器配置为电子邮件错误,我想保持原样,如果你可以在那种情况下回复。 感谢
答案 0 :(得分:1)
有效负载为Exception
,Throwable.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();
}