203.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
インターフェースを実装するクラスを作成できます。完全 Exchange へのアクセスが可能な形式(Exchange)
メソッド内で必要な正確な情報を選択して抽出し、カスタム方法でフォーマットし、返すことができます。戻り値は最終的なログメッセージになります。
Log コンポーネントは、以下のいずれかの方法でカスタム ExchangeFormatter
を取得できます。
レジストリーで LogComponent を明示的にインスタンス化します。
<bean name="log" class="org.apache.camel.component.log.LogComponent"> <property name="exchangeFormatter" ref="myCustomFormatter" /> </bean>
203.8.1. 設定に関する規則:*
logFormatter
という名前の Bean を登録するだけです。Log コンポーネントは、自動的に選択できるインテリジェントなコンポーネントです。
<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&param2=100"/> <to uri="log:bar?param1=bar&param2=200"/>