【问题标题】:apache camel how to log the route progressapache camel如何记录路由进度
【发布时间】:2014-09-23 16:04:24
【问题描述】:

当路由中发生异常并且没有被异常管理器捕获时,会显示路由的详细信息,这有助于了解可能出了什么问题。

当异常被捕获和管理时,怎么可能有同一种日志呢?

我希望有一些来自 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
---------------------------------------------------------------------------------------------------------------------------------------

...

提前谢谢,

弗朗索瓦

【问题讨论】:

  • List<MessageHistory> list = exchange.getProperty(Exchange.MESSAGE_HISTORY, List.class);

标签: routes apache-camel


【解决方案1】:

这是消息历史 EIP 模式

该页面详细说明了这一点,以及您如何自己访问历史记录。 org.apache.camel.util.MessageHelper#dumpMessageHistoryStacktrace 是 Camel 使用自己来输出您在上面看到的表格。

但正如 Konstantin 上面所写,您可以从 Java 代码中访问历史记录,如下所示

List<MessageHistory> list = exchange.getProperty(Exchange.MESSAGE_HISTORY, List.class);

【讨论】:

    【解决方案2】:

    在挖掘代码后,我发现 org.apache.camel.util.MessageHelper#dumpMessageHistoryStacktrace 应该可以满足我的需求。

    【讨论】:

      【解决方案3】:

      我尝试了 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);
      

      【讨论】:

        猜你喜欢
        • 2016-09-29
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 2014-05-23
        • 1970-01-01
        相关资源
        最近更新 更多