12.2. LogEIP

概要

Apache Camel では、ルートでログを出力する方法は複数あります。

  • log DSL コマンドの使用。
  • メッセージコンテンツをログに記録できる Log コンポーネントの使用。
  • メッセージフローを追跡するトレーサーの使用。
  • Processor または Bean エンドポイントを使用した Java でのロギング。
log DSL コマンドと log コンポーネントの違い

log DSL は非常に軽量で、Starting to do …​ のように人の作業をロギングします。これは、Simple 言語に基づいたメッセージのみにログを記録できます。対照的に、Log コンポーネントは、フル機能のロギングコンポーネントです。Log コンポーネントはメッセージ自体をログに記録でき、ロギングを制御する多くの URI オプションがあります。

Java DSL の例

Apache Camel 2.2 以降、log DSL コマンドを使用して、Simple 式言語を使用してランタイム時にログメッセージを作成できます。たとえば、以下のように、ルート内にログメッセージを作成できます。

from("direct:start").log("Processing ${id}").to("bean:foo");

このルートは、ランタイムに String フォーマットメッセージを作成します。ルート ID をログ名として使用し、ログメッセージは INFO レベルでログに記録されます。デフォルトでは、ルートには route-1route-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 要素は、messageloggingLevel、および 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>

複数のログがあり、すべてのログに同じログ名を設定する場合は、各ログに設定を追加する必要があります。