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]
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>
<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" />
<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"/>
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" scope="prototype"/>
そして、さまざまなオプションでログ URI を使用して Camel ルートを作成できます。
<to uri="log:foo?param1=foo&param2=100"/> <to uri="log:bar?param1=bar&param2=200"/>
<to uri="log:foo?param1=foo&param2=100"/>
<to uri="log:bar?param1=bar&param2=200"/>