213.8. ログ出力の完全なカスタマイズ

Camel 2.11 から利用可能

#Formatting セクションで説明されているオプションを使用すると、ロガーの出力の大部分を制御できます。ただし、ログ行は常に次の構造に従います。

Exchange[Id:ID-machine-local-50656-1234567901234-1-2, ExchangePattern:InOut,
Properties:{CamelToEndpoint=log://org.apache.camel.component.log.TEST?showAll=true,
CamelCreatedTimestamp=Thu Mar 28 00:00:00 WET 2013},
Headers:{breadcrumbId=ID-machine-local-50656-1234567901234-1-1}, BodyType:String, Body:Hello World, Out: null]

この形式は、場合によっては不適切です。おそらく、必要があるためです…

  • …​ 出力されるヘッダーとプロパティーをフィルタリングして、インサイトと冗長性のバランスをとります。
  • …​ ログメッセージを最も読みやすいと思われるものに調整します。
  • …​ 例えばSplunk などのログマイニングシステムによる消化用にログメッセージを調整します。
  • …​ 特定のボディタイプを異なる方法で印刷します。
  • …など

完全なカスタマイズが必要な場合はいつでも、ExchangeFormatter インターフェイスを実装するクラスを作成できます。format(Exchange) メソッド内では、完全な Exchange にアクセスできるため、必要な正確な情報を選択して抽出し、カスタムの方法でフォーマットして返すことができます。戻り値が最終的なログメッセージになります。

次の 2 つの方法のいずれかで、Log コンポーネントにカスタム ExchangeFormatter を取得させることができます。

レジストリーで LogComponent を明示的にインスタンス化します。

<bean name="log" class="org.apache.camel.component.log.LogComponent">
   <property name="exchangeFormatter" ref="myCustomFormatter" />
</bean>

213.8.1. 設定より規約:*

logFormatter という名前の Bean を登録するだけです。ログコンポーネントは、それを自動的に取得するのに十分なほどインテリジェントです。

<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
注記

ExchangeFormatter、その Camel Context 内のすべての Log エンドポイント に適用されます。エンドポイントごとに異なる ExchangeFormatters が必要な場合は、必要な回数だけ LogComponent をインスタンス化し、関連する Bean 名をエンドポイント 接頭辞として使用します。

Camel 2.11.2/2.12 以降、カスタムログフォーマッタを使用する場合、カスタムログフォーマッタで設定されるログ URI にパラメーターを指定できます。ただし、その場合、logFormatter をスコープ付きのプロトタイプとして定義する必要があるため、異なるパラメーターがある場合は共有されません。たとえば、

<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" scope="prototype"/>

そして、さまざまなオプションでログ URI を使用して Camel ルートを作成できます。

<to uri="log:foo?param1=foo&amp;param2=100"/>

<to uri="log:bar?param1=bar&amp;param2=200"/>