Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第100章 Log
ログコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
log: コンポーネントは、メッセージエクスチェンジを基礎となるロギングメカニズムに記録します。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
log:loggingCategory[?options]
log:loggingCategory[?options]
loggingCategory は使用するロギングカテゴリーの名前です。URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
レジストリーからの Logger インスタンスの使用
Camel 2.12.4/2.13.1 以降、レジストリーに
org.slf4j.Logger
の単一インスタンスがある場合、loggingCategory はロガーインスタンスの作成に使用されなくなりました。代わりに、登録されたインスタンスが使用されます。また、?logger=#myLogger
URI パラメーターを使用して特定の Logger
インスタンスを参照することもできます。最終的には、登録済みおよび URI logger
パラメーターがない場合、loggingCategory を使用してロガーインスタンスが作成されます。
たとえば、ログエンドポイントは通常、以下のように level オプションを使用してログ
レベル
を指定します。
log:org.apache.camel.example?level=DEBUG
log:org.apache.camel.example?level=DEBUG
デフォルトのロガーは、すべてのエクスチェンジ(通常のロギング)をログに記録します。しかし、Apache Camel には
Throughput
ロガーも含まれています。これは、groupSize
オプションが指定されているたびに使用されます。
DSL へのログイン
DSL には直接
ログイン
がありますが、目的が異なります。これは、軽量ログおよびヒューマンログを対象としています。詳細は、LogEIP を参照してください。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
オプション | デフォルト | タイプ | Description |
---|---|---|---|
level
|
INFO
|
文字列
|
使用するロギングレベル。使用できる値は、ERROR 、WARN 、INFO 、DEBUG 、TRACE 、OFF です。
|
marker
|
null
|
文字列
|
Camel 2.9: 使用 するオプションのマーカー 名。 |
groupSize
|
null
|
整数
|
スループットロギングのグループサイズを指定する整数。 |
groupInterval
|
null
|
整数
|
指定した場合、この時間間隔(ミリ秒単位)でメッセージ統計をグループ化します。 |
groupDelay
|
0
|
整数
|
統計の初期遅延を設定します(ミリ秒単位)。 |
groupActiveOnly
|
true
|
boolean
|
true の場合、新しいメッセージが時間間隔で受信されない場合に統計を非表示にします。false の場合は、メッセージトラフィックに関係なく統計を表示します。 |
logger
|
ロガー
|
Camel 2.12.4/2.13.1: 使用するレジストリーから org.slf4j.Logger へのオプションの参照。
|
フォーマット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ログにより、ログ行へのエクスチェンジの実行がフォーマットされます。デフォルトでは、ログは
LogFormatter
を使用してログ出力をフォーマットします。LogFormatter
には以下のオプションが含まれます。
オプション | デフォルト | 説明 |
---|---|---|
showAll
|
false
|
すべてのオプションをオンにするクイックオプション(マルチライン、maxChars を使用する場合は手動で設定する必要があります)。 |
showExchangeId
|
false
|
一意のエクスチェンジ ID を表示します。 |
showExchangePattern
|
true
|
は、Message Exchange Pattern (略して MEP)を示しています。 |
showProperties
|
false
|
エクスチェンジプロパティーを表示します。 |
showHeaders
|
false
|
In メッセージヘッダーを表示します。 |
skipBodyLineSeparator
|
true
|
Camel 2.12.2: メッセージボディーをログに記録するときに行セパレーターをスキップするかどうか。これにより、はメッセージボディーを 1 行でログに記録できます。このオプションを
false に設定すると、本文から行区切り文字が保持され、ボディー は としてログに記録され ます。
|
showBodyType
|
true
|
In body Java タイプを表示します。 |
showBody
|
true
|
In ボディーを表示します。 |
showOut
|
false
|
エクスチェンジに Out メッセージがある場合は、Out メッセージが表示されます。 |
showException
|
false
|
Apache Camel 2.0: エクスチェンジに例外がある場合は、例外メッセージを表示します(スタックトレースなし)。 |
showCaughtException
|
false
|
Apache Camel 2.0: エクスチェンジにキャッチされた例外がある場合は、例外メッセージを表示します(スタックトレースなし)。キャッチされた例外はエクスチェンジのプロパティーとして保存され、たとえば doCatch は例外をキャッチできます。Try Catch Finally を参照してください。
|
showStackTrace
|
false
|
Apache Camel 2.0: エクスチェンジに例外がある場合にスタックトレースを表示します。showAll 、showException 、または showCaughtException のいずれかが有効な場合にのみ有効です。
|
showFiles
|
false
|
Camel 2.9: Camel がファイルの本文を表示するかどうか(java.io.File など)。 |
showFuture
|
false
|
Camel で java.util.concurrent.Future ボディーを表示するかどうか。有効な場合、Camel は Future タスクが実行されるまで待機できる可能性があります。デフォルトでは待機しません。
|
showStreams
|
false
|
Camel 2.8: Camel がストリーム本文を表示するかどうか(java.io.InputStream など)。このオプションを有効にすると、このロガーによってストリームがすでに読み込まれているため、後でメッセージボディーにアクセスできないことがあります。これを修正するには、Stream Caching を使用する必要があります。 |
複数行
|
false
|
true の場合、各情報が新しい行に記録されます。
|
maxChars
|
1 行に記録される文字数を制限します。デフォルト値は、Camel 2.9 以降の 10000 です。
|
ロギングストリーム本文
上記の showFiles または showStreams プロパティーをサポートしない古いバージョンの Camel では、代わりに CamelContext で以下のプロパティーを設定して、ストリームとファイル本文の両方をログに記録できます。
camelContext.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, true);
camelContext.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, true);
通常のロガーの例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のルートでは、注文の処理前に
DEBUG
レベルで受信注文をログに記録します。
from("activemq:orders").to("log:com.mycompany.order?level=DEBUG").to("bean:processOrder");
from("activemq:orders").to("log:com.mycompany.order?level=DEBUG").to("bean:processOrder");
または、Spring XML を使用してルートを定義します。
<route> <from uri="activemq:orders"/> <to uri="log:com.mycompany.order?level=DEBUG"/> <to uri="bean:processOrder"/> </route>
<route>
<from uri="activemq:orders"/>
<to uri="log:com.mycompany.order?level=DEBUG"/>
<to uri="bean:processOrder"/>
</route>
フォーマッターサンプルを持つ通常のロガー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のルートでは、注文が処理される前に
INFO
レベルで受信注文をログに記録します。
from("activemq:orders"). to("log:com.mycompany.order?showAll=true&multiline=true").to("bean:processOrder");
from("activemq:orders").
to("log:com.mycompany.order?showAll=true&multiline=true").to("bean:processOrder");
groupSize サンプルを使用したスループットロガー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のルートでは、10 メッセージ別にグループ化された
DEBUG
レベルで受信注文のスループットをログに記録します。
from("activemq:orders"). to("log:com.mycompany.order?level=DEBUG&groupSize=10").to("bean:processOrder");
from("activemq:orders").
to("log:com.mycompany.order?level=DEBUG&groupSize=10").to("bean:processOrder");
groupInterval サンプルを使用したスループットロガー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このルートは、メッセージ統計が 10 ごとにログに記録され、最初の 60 秒の遅延と統計がメッセージトラフィックがなくても表示されます。
from("activemq:orders") .to("log:com.mycompany.order?level=DEBUG&groupInterval=10000&groupDelay=60000&groupActiveOnly=false") .to("bean:processOrder");
from("activemq:orders")
.to("log:com.mycompany.order?level=DEBUG&groupInterval=10000&groupDelay=60000&groupActiveOnly=false")
.to("bean:processOrder");
以下がログに記録されます。
"Received: 1000 new messages, with total 2000 so far. Last group took: 10000 millis which is: 100 messages per second. average: 100"
"Received: 1000 new messages, with total 2000 so far. Last group took: 10000 millis which is: 100 messages per second. average: 100"
ロギング出力の完全なカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.11 から利用可能
フォーマット セクションで説明されているオプションを使用すると、ロガーの出力の多くを制御できます。ただし、ログの行は常に以下の構造に従います。
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 などのログマイニングシステムによるダイジェストのためにログメッセージを調整します。
- ... 特定のボディータイプの出力が異なります。
- ... etc.
絶対カスタマイズが必要な場合は、
ExchangeFormatter
インターフェイスを実装するクラスを作成できます。完全なエクスチェンジにアクセスできる format (Exchange)
メソッド内で、必要な正確な情報を選択して抽出し、カスタム方式でフォーマットして返すことができます。戻り値は最終的なログメッセージになります。
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>
設定に対する規則:
単に Bean を
logFormatter
という名前で登録します。Log コンポーネントは、自動的に取得できるほどインテリジェントなものです。
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
注記:
Exchange フォーマッター
は Camel コンテキスト内のすべてのログエンドポイントに適用されます。異なるエンドポイントに異なる 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&aram2=100"/> ... <to uri="log:bar?param1=bar&aram2=200"/>
<to uri="log:foo?param1=foo&aram2=100"/>
...
<to uri="log:bar?param1=bar&aram2=200"/>
OSGi でのログコンポーネントの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.12.4/2.13.1 以降の改善
OSGi 内で Log コンポーネントを使用する場合(Karaf でなど)、基礎となるロギングメカニズムは PAX ロギングによって提供されます。
org.slf4j.LoggerFactory.getLogger()
メソッドを呼び出すバンドルを検索し、バンドルをロガーインスタンスに関連付けます。カスタム org.sfl4j.Logger
インスタンスを指定しない場合、Log コンポーネントによって作成されたロガーは camel-core
バンドルに関連付けられます。
シナリオによっては、ロガーに関連付けられたバンドルがルート定義が含まれるバンドルである必要があります。これを実行するには、レジストリーに
org.slf4j.Logger
の単一インスタンスを登録するか、または logger
URI パラメーターを使用して参照します。