0

複数のルートに適用されるエラーハンドラーを定義しました。

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 

ここで、例外がルート 1 またはルート 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}) などを試しましたが、うまくいきません。

どうもありがとう!

4

2 に答える 2

0

アペンダー構成にスレッド名を追加できます。たとえば、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]  .....

ルートを特定するだけで十分だと思います

于 2014-01-13T13:38:15.137 に答える
0

ルート名を指定するには、理想的には .id() ではなく .routeid() を使用する必要があります - 後でルート名ではなくノード名を設定します:

from(file1).routeId(route1)

ルート ID を抽出できます。交換を作成したルート ID を返す exchange.getFromRouteId() を使用できます。直接コンポーネントを使用してルートをネストしている場合は、以下のように Unit of Work を使用できます。

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

DSL を使用してこの情報を取得するメカニズムがあるかどうかは不明です。

これが役立つことを願っています。

于 2014-01-14T09:40:31.240 に答える