1

camel bindy からログ情報を取得しようとしています。注釈付きの製品 Bean と csv ファイルをソースとして使用する BindyCsvDataFormat bindyProduct を使用して、作業セットアップを行いました。

ここで、CSV ファイルと注釈付き Bean を変更しました。バインド プロセッサ内で処理の継ぎ目がスタックしますが、情報/ログがまったく得られません。私の debugProcessor にはまったく到達していません。非整列化ステップの前に配置すると、いくつかのログが記録され、デバッグできます。新しいファイルが適合/一致しなくなった理由と、ログや例外がない理由、または役立つものが何であるか疑問に思います。

        from("file:csv-testdata")
        .unmarshal(bindyProduct)    
        .process(debugProcessor)

よろしくお願いします

4

1 に答える 1

2

apache camel での例外のロギング

質問をしたとき、私はラクダ乗りの経験を始めたばかりでした。その間に、私が探していたものを達成するための素晴らしい方法をいくつか見つけました。したがって、他の誰かがこの質問に対する答えを探している場合:

1. 最初のアプローチ:

プロジェクトのロギングを有効にして適切に構成し、ルートにロギング URL を追加してロギングを処理します。

1.1 ロギング用の依存関係を pom.xml に追加します。

<groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

1.2 log4j.properties ファイルを src/main/resources フォルダーに追加します (log4j を使用する場合)。そこにログレベル、アペンダーなどを定義します

1.3 ログをルートに追加する

from("...")
.unmarshal(bindyProduct)
.to("log:com.your.package.YourChosenName?level=ERROR&multiline=true&showCaughtException=true")
.to(...);

すべてのオプションのリストは、ここにあります http://camel.apache.org/log.html 使用できます

&showAll=true 

ヘッダー、プロパティ、本文などのすべての情報をログに記録する

URL の「level=」オプションのログレベルの重大度は、log4j.properties ファイルで定義した重大度以上でなければならないことに注意してください。

2. 2 番目のアプローチ

例外をログに記録する DebugProcessor を定義し、不思議な動作をするプロセッサの直後のルートに配置します

2.1 DebugProcessor を書く プロセッサは public void process(Exchange exchange) throws Exception {

なぜ例外が見つからないのか疑問に思っているなら

exchange.getException()

を使用して取得してみてください

Exception exception = (Exception) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);

この例外で好きなことをしてください(sysoutにログを記録するなど)

2.2 デバッガーを RouteBuilder Java クラス (または他の場所、Spring、XML など) 内のルートに接続します。

DebugProcessor debugProcessor1 = new DebugProcessor();

from("...")
.unmarshal(bindyProduct)
.process(debugProcessor1)
.to(...);

3. 第三のアプローチ

camels .doTry()/.doCatch() を使用するか、(おそらくもっと良い) onException() ルートを使用します

( http://camel.apache.org/exception-clause.html / camel.apache.org/try-catch-finally.html)

3.1 デバッグしたいルートとは別の onException() ルートを構築する

次の onException ルートは、5 秒または 10 回の例外ごとに、例外を集約し、(速度テンプレートを介して) 人間が判読できる適切な方法でそれらを書き留めます。

onException(Exception.class) // OR a special excepion (io, etc)
        .aggregate(header("CamelFileParent"),
                new ExceptionAggregationStrategy())
                .completionSize(10).completionTimeout(5000)
        .to("velocity:velocity/errors.log.vm")
        .to("file:camel/xml-out?fileName=errors-${file:name.noext}-${date:now:yyyy-MM-dd_HH-mm-ss-SSS}.log");

これは単なる例です。あなたは何でも好きなようにできますし、camel は、たとえば、メールとして送信したり、DB に入れたりすることができます。

ルートに追加のプロセッサやログを記録する必要はありません。

from("...")
.unmarshal(bindyProduct)
.to(...);
于 2014-10-28T09:52:51.653 に答える