2014-01-13 121 views
0

使用日誌我定義一個錯誤處理程序,它適用於多條路線,即駱駝:如何在的ErrorHandler

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

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

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

當異常內部的SpecificProcessor類之一發生時,以下記錄:

[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或路徑2即:

[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})的東西,但它不起作用。

非常感謝!

回答

0

您可以將線程名稱添加到您的appender配置中。比如%t代表的log4j:

<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] ..... 

我想這足以識別路線

0

要指定路線名稱,您應使用.routeid(),而不是.ID() - 後來設置節點名稱,而不是路由名稱:

from(file1).routeId(route1) 

您可以提取路由ID,您可以使用exchange.getFromRouteId(),它將返回創建交換的路由ID。如果您使用的直流分量嵌套的路線,你可以使用工作單元,如下圖所示:

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

不知道是否有機制,用於檢索使用DSL此信息。

我希望這會有所幫助。