この節では、Message Queue 4.0 による接続のクライアントランタイムログのサポートと、セッション関連のイベントについて説明します。
JDK 1.4 以上には、java.util.logging ライブラリが含まれています。このライブラリは、アプリケーション固有のログに使用される標準のロガーインタフェースを実装しています。
Message Queue のクライアントランタイムは Java Logging API を使用してログ機能を実装します。ログ活動を設定するために、すべての J2SE 1.4 ロギング機能を使用できます。たとえば、Message Queue クライアントランタイムがログ情報を出力する方法を設定するために、アプリケーションは次の Java ロギング機能を使用することができます。
ログハンドラ
ログフィルタ
ログフォーマッタ
ログレベル
Java Logging API の詳細は、http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/logging/overview.html にある Java ロギングの概要を参照してください。
Message Queue プロバイダは、ログレベルやログ活動に関連付けて一連のログの名前空間を定義します。Message Queue クライアントは、ログ設定が適切であれば、この名前空間を使用して接続やセッションイベントをログに記録することができます。
Message Queue クライアントランタイムのルートのログ名前空間は、javax.jms と定義されます。Message Queue クライアントランタイム内のすべてのロガーが、この名前を親の名前空間として使用します。
Message Queue クライアントランタイムに使用されるログレベルは、java.util.logging.Level クラス内で定義されるものと同じです。このクラスでは、7 つの標準ログレベルと、ログのオン/オフに使用できる 2 つの追加設定が定義されます。
ログをオフにします。
優先順位が最高である最高値。アプリケーションで定義します。
アプリケーションで定義します。
アプリケーションで定義します。
アプリケーションで定義します。
アプリケーションで定義します。
アプリケーションで定義します。
優先順位が最低である最低値。アプリケーションで定義します。
すべてのメッセージのログを有効にします。
一般に、Message Queue クライアントランタイム内で発生した例外やエラーは、名前空間 javax.jms を使用するロガーによってログ記録されます。
JVM からスローされクライアントランタイムによってキャッチされる例外 (IOException など) は、ログ名前空間 javax.jms を使用するロガーによって WARNING レベルでログ記録されます。
クライアントランタイムからスローされる JMS 例外 (IllegalStateException など) は、ログ名前空間 javax.jms を使用するロガーによって FINER レベルでログ記録されます。
JVM からスローされクライアントランタイムによってキャッチされるエラー (OutOfMemoryError など) は、ログ名前空間 javax.jms を使用するロガーによって SEVERE レベルでログ記録されます。
以下の表は、JMS コネクションとセッションについて、ログ記録できるイベントとログイベントに対して設定する必要のあるログレベルを示しています。
次の表は、コネクションのログレベルとイベントについて示したものです。
表 1–6 名前空間 javax.jms.connection のログレベルとイベント
ログレベル |
イベント |
---|---|
FINE |
接続が作成されました |
FINE |
接続が起動しました |
FINE |
接続が閉じました |
FINE |
接続が破棄されました |
FINE |
再接続されました |
FINER |
その他の接続アクティビティー (setClientID など) |
FINEST |
メッセージ、通知、Message Queue アクション、制御メッセージ (トランザクションのコミットなど) |
セッションの場合、次の情報がログレコードに記録されます。
コンシューマに配信されるメッセージの各ログレコードには、ConnectionID、SessionID、ConsumerID が含まれています。
プロデューサによって送信されるメッセージの各ログレコードには、ConnectionID、SessionID、ProducerID、送信先名が含まれています。
次の表は、セッションのログレベルとイベントについて示したものです。
表 1–7 名前空間 javax.jms.session のログレベルとイベント
ログレベル |
イベント |
---|---|
FINE |
セッションが作成されました |
FINE |
セッションが閉じました |
FINE |
プロデューサが作成されました |
FINE |
コンシューマが作成されました |
FINE |
送信先が作成されました |
FINER |
その他のセッションアクティビティー (セッションのコミットなど)。 |
FINEST |
メッセージがプロデュースされ、消費されました。(メッセージのプロパティーと本文はログレコードに記録されません。) |
デフォルトでは、出力ログレベルはアプリケーションの実行されている JRE から継承されます。JRE_DIRECTORY/lib/logging.properties ファイルを参照してレベルを確認してください。
ログはプログラムや設定ファイルを使用して設定できます。また、ログの発生する範囲を制御することもできます。次の節では、これらの機能について説明します。
次の例は、JRE_DIRECTORY/lib/logging.properties ファイル内でログの名前空間とログレベルを設定する方法を示しています。この方法は Java ランタイム環境のログレベルの設定に使用されます。JRE を使用するすべてのアプリケーションが同じログ設定になります。次に示すサンプル設定では、名前空間 javax.jms.connection のログレベルをINFO に設定し、その出力が java.util.logging.ConsoleHandler に書き込まれるように指定しています。
#logging.properties file. # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. handlers= java.util.logging.ConsoleHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overriden by a facility-specific level. # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= INFO # Limit the messages that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # The logger with javax.jms.connection name space will write # Level.INFO messages to its output handler(s). In this configuration # the ouput handler is set to java.util.logging.ConsoleHandler. javax.jms.connection.level = INFO
アプリケーションの実行に使用する Java コマンド行からログ設定ファイルを定義することもできます。このアプリケーションは、指定のログファイル内で定義された設定を使用します。次の例では、configFile は JRE_DIRECTORY/lib/logging.properties ファイル内で定義されているものと同じ形式を使用します。
java -Djava.util.logging.config.file=configFile MQApplication
次のコードでは、java.util.logging API を使用して、javax.jms.connection 名前空間のログレベルを FINE に変更することで、接続イベントをログ記録しています。このようなコードをアプリケーションに追加して、プログラムによるログ設定を行うことができます。
import java.util.logging.*; //construct a file handler and output to the mq.log file //in the system's temp directory. Handler fh = new FileHandler("%t/mq.log"); fh.setLevel (Level.FINE); //Get Logger for "javax.jms.connection" domain. Logger logger = Logger.getLogger("javax.jms.connection"); logger.addHandler (fh); //javax.jms.connection logger would log activities //with level FINE and above. logger.setLevel (Level.FINE);