【问题标题】:Camel: how to use log in ErrorHandlerCamel:如何在ErrorHandler中使用日志
【发布时间】:2014-02-01 02:23:18
【问题描述】:

我已经定义了一个错误处理程序,它适用于多个路由,即

errorHandler(transactionErrorHandler() 
    .maximumRedeliveries(5) 
    .log("SOMETHING USELESS"); 

from(file1) 
    .id(route1) 
    .transacted() 
    .process(new SpecificProcessor1()); 

from(file2) 
    .id(route2) 
    .transacted() 
    .process(new SpecificProcessor2()); 

当特定处理器类之一发生异常时,将记录以下内容:

[10-Jan-2014 15:08:59.449] [Error] SOMETHING USELESS: Failed delivery for (MessageId: ID-BLAH BLAH). On delivery attempt: 1 caught: java.lang.Exception: cannot do whatever I'm supposed to do 

现在我想打印一些有用的东西来帮助确定异常是否发生在 route1 或 route2 中,即:

[10-Jan-2014 15:08:59.449] [Error] ROUTE 1: Failed delivery for (MessageId: ID-BLAH BLAH). On delivery attempt: 1 caught: java.lang.Exception: cannot do whatever I'm supposed to do 

我怎样才能做到这一点?

我尝试过 .log(${routeId}) 之类的方法,但它不起作用。

非常感谢!

【问题讨论】:

    标签: variables logging apache-camel enterprise-integration


    【解决方案1】:

    您可以将线程名称添加到附加程序配置中。例如 log4j 的 %t:

    <appender name="..." class="...">
    ....
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss,SSS} %p %t %c - %m%n" />
        </layout>
    </appender>
    

    你会看到类似的东西:

    13/01/2014 12:52:33,535 INFO Camel (mainCamelContext) thread #8 - JmsConsumer[jms/customer]  .....
    

    我想识别路线就够了

    【讨论】:

      【解决方案2】:

      要指定路由名称,最好使用 .routeid(),而不是 .id() - 后者设置节点名称,而不是路由名称:

      from(file1).routeId(route1)
      

      您可以提取路由 id,您可以使用 exchange.getFromRouteId() 返回创建交换的路由 id。如果您使用直接组件嵌套路由,则可以使用工作单元,如下所示:

      exchange.getUnitOfWork().getRouteContext().getRoute().getId()
      

      不确定是否有使用 DSL 检索此信息的机制。

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多