12.2. LogEIP
概要
Apache Camel では、ルートでログを出力する方法は複数あります。
-
log
DSL コマンドの使用。 - メッセージコンテンツをログに記録できる Log コンポーネントの使用。
- メッセージフローを追跡するトレーサーの使用。
-
Processor
または Bean エンドポイントを使用した Java でのロギング。
Java DSL の例
Apache Camel 2.2 以降、log
DSL コマンドを使用して、Simple 式言語を使ってランタイム時にログメッセージを作成できます。たとえば、以下のように、ルート内にログメッセージを作成できます。
from("direct:start").log("Processing ${id}").to("bean:foo");
このルートは、ランタイムに String
フォーマットメッセージを作成します。ルート ID をログ名として使用し、ログメッセージは INFO
レベルでログに記録されます。デフォルトでは、ルートには route-1
、route-2
などの連続した名前が付けられます。ただし、DSL コマンド routeId("myCoolRoute")
を使用して、カスタムルート ID を指定することもできます。
ログ DSL は、ロギングレベルとログ名を明示的に設定できるようにするバリアントも提供します。たとえば、ロギングレベルを明示的に LoggingLevel.DEBUG
に設定するには、以下のようにログ DSL を呼び出すことができます。
ログ DSL には、ロギングレベルや名前を設定するためのオーバーロードされたメソッドもあります。
from("direct:start").log(LoggingLevel.DEBUG, "Processing ${id}").to("bean:foo");
ログ名を fileRoute
に設定するには、以下のようにログ DSL を呼び出すことができます。
from("file://target/files").log(LoggingLevel.DEBUG, "fileRoute", "Processing file ${file:name}").to("bean:foo");
XML DSL の例
XML DSL では、ログ DSL は log
要素によって表され、ログメッセージは以下のように message
属性を Simple 式に設定することで指定されます。
<route id="foo"> <from uri="direct:foo"/> <log message="Got ${body}"/> <to uri="mock:foo"/> </route>
log
要素は、message
、loggingLevel
、および logName
属性をサポートします。以下に例を示します。
<route id="baz"> <from uri="direct:baz"/> <log message="Me Got ${body}" loggingLevel="FATAL" logName="cool"/> <to uri="mock:baz"/> </route>
グローバルログ名
ルート ID はデフォルトのログ名として使用されます。Apache Camel 2.17 以降、logname パラメーターを設定してログ名を変更できます。
Java DSL では、以下の例のようにログ名を設定します。
CamelContext context = ... context.getProperties().put(Exchange.LOG_EIP_NAME, "com.foo.myapp");
XML では、以下のようにログ名を設定します。
<camelContext ...> <properties> <property key="CamelLogEipName" value="com.foo.myapp"/> </properties>
複数のログがあり、すべてのログに同じログ名を設定する場合は、各ログに設定を追加する必要があります。