当路由中发生异常并且异常管理器未捕获异常时,会显示路由的详细信息,这有助于了解可能出了什么问题。
当异常被捕获并管理时,怎么可能有同一种日志呢?
我更喜欢从 java 部分“调用”一些东西,例如在处理器中,但 dsl 风格的东西也可以。
路线记录通常如下所示:
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor Elapsed (ms)
[route1 ] [cxf_process ] [cxfrs://bean:myServer?bindingStyle=SimpleConsumer ] [ 60029]
[route1 ] [to55 ] [direct:validateAndRedirect ] [ 60029]
[route27 ] [setProperty37 ] [setProperty[operationName] ] [ 0]
[route27 ] [setProperty38 ] [setProperty[Country] ] [ 0]
[route27 ] [setProperty39 ] [setProperty[Language] ] [ 0]
[route27 ] [process25 ] [my.package.ExtractUserMailProcessor@535f9aac ] [ 0]
[route27 ] [enrich25 ] [enrich[direct:checkAccess] ] [ 0]
[route27 ] [recipientList1 ] [recipientList[simple{Simple: direct:${property.operationName}}] ] [ 60029]
[route28 ] [setHeader84 ] [setHeader[CamelCxfRsUsingHttpAPI] ] [ 0]
[route28 ] [setHeader85 ] [setHeader[CamelHttpPath] ] [ 0]
[route28 ] [setHeader86 ] [setHeader[CamelHttpMethod] ] [ 1]
[route28 ] [setHeader87 ] [setHeader[Content-Type] ] [ 0]
[route28 ] [enrich9 ] [enrich[direct:wsClient] ] [ 60029]
[route7 ] [to7 ] [cxfrs:bean:myClient ] [ 60027]
Exchange
---------------------------------------------------------------------------------------------------------------------------------------
...
提前谢谢,
弗朗索瓦
这是消息历史EIP模式
该页面详细介绍了这一点,以及您如何自己访问历史记录。 Camel 使用
org.apache.camel.util.MessageHelper#dumpMessageHistoryStacktrace
来输出您在上面看到的表格。
但是正如 Konstantin 上面所写,您可以通过 Java 代码访问历史记录,如下所示
List<MessageHistory> list = exchange.getProperty(Exchange.MESSAGE_HISTORY, List.class);
深入研究代码后,我发现 org.apache.camel.util.MessageHelper#dumpMessageHistoryStacktrace 应该可以实现我想要的功能。
我尝试了 Claus 代码,但它没有显示类似于 errorHandler 的堆栈跟踪。我最终使用了 Fracois 解决方案并提供了更多详细信息:
DefaultExchangeFormatter historyFormatter;
historyFormatter = new DefaultExchangeFormatter();
historyFormatter.setShowExchangeId(true);
historyFormatter.setMultiline(true);
historyFormatter.setShowHeaders(true);
historyFormatter.setStyle(DefaultExchangeFormatter.OutputStyle.Fixed);
String routeStackTrace = MessageHelper.dumpMessageHistoryStacktrace(exchange, historyFormatter, true);
log.debug(routeStackTrace);