14.3 UCPでのロギングおよびトレースの概要
UCP診断の主要な2つの側面は、ロギングとトレースです。
ロギングでは、ログ・レコードをコンソール、ファイルまたは標準のロギング・プロパティで定義されたその他のログ・ハンドラに書き込みます。ログ出力の名前は、プール・データソース名と同じです。プール・データソース名は、適切なプロパティを使用して設定されます。名前を付けないままにしておくこともできます。その場合、すべての診断が共通のログ出力に入ります。共通ログ出力の名前はoracle.ucp
です。ロギングは、JavaロギングAPI java.util.logging
を実装します。
トレースは特殊なロギング・ユースケースで、イベントによってUCP診断がトリガーされ、そのバッファが対応するログ出力にダンプされるまで、ログ・レコードがインメモリー・リング・バッファに書き込まれます。UCPには、次の2つのカテゴリのトレース・バッファがあります。
ノート:
プール・データソースとUCPには1対1のマッピングがあります。- 指定された名前のプールに直接関係しない静的メソッドからのログのトレースに使用される、1つの共通バッファで構成されるカテゴリ。共通バッファは、関連付けられたUCPの全存続期間、永続的です。
- 名前付きプール・データソース(PDS)オブジェクト数と同じ数のバッファを含むカテゴリで、すべてのバッファは単一の名前付きPDSにマップされます。そのPDSからのすべてのトレースが対応するバッファに入ります。その存続期間はプール起動から始まり、プール破棄で終わります。
14.3.1 ロギングおよびトレース設定
ノート:
デフォルトでは、トレースはオンでロギングはオフです。次の表に、この機能の概要を示します。
ロギング設定 | トレース設定 | ロギング機能 | トレース機能 |
---|---|---|---|
off |
off |
無効 | 無効 |
on |
off |
有効 | 無効 |
off |
on |
無効 | 有効 |
on |
on |
有効 | 無効 |
14.3.2 診断システム・プロパティおよびコマンドライン
次の方法で可能です。
- Oracle JVMコマンドラインの使用
- アプリケーション・ソース・コード内
- Java Management Extensions (JMX)の使用
プロパティ名 | 説明 |
---|---|
oracle.ucp.diagnostic.enableTrace |
トレースを有効にするフラグです。このプロパティのデフォルト値はtrue です。
|
oracle.ucp.diagnostic.enableLogging |
デバッグ・ロギングを有効にするフラグです。このプロパティのデフォルト値はfalse です。
|
oracle.ucp.diagnostic.bufferSize |
インメモリー・トレース・バッファ・サイズを指定します。デフォルト値は1024です。 |
oracle.ucp.diagnostic.loggingLevel |
ロギング構成ファイルでログ出力に他の値が指定されていない場合に使用されるデフォルトのロギング・レベルを指定します。このプロパティのデフォルト値はINFO です。
|
java.util.logging.config.file |
ロードするロギング・プロパティ・ファイル名を指定します。すべてのログ出力のデフォルト値はConsoleHandler です。
|
oracle.ucp.diagnostic.errorCodesToWatchList |
すべてのトレースをログ出力にダンプする例外およびエラー・コードのリストを提供します。 |
14.3.3 ロギング構成ファイル
java.util.logging
パッケージの説明に従ってロギング設定を構成できます。異なるログ出力に異なるレベルを設定する場合は、ロギング構成ファイルでレベルを設定する必要があります。
共通ログ出力を構成するには、次を実行します。
- ログ出力を
oracle.ucp
として指定します。 - 適切なロギング・レベルを設定します。
- ログの書込み先と書込み方法を指定します。たとえば、ログをコンソールに書き込むか、ファイルに書き込むかなどです。ファイルの場合は、ファイル名、フォーマッタなどを指定します。
プール・データソース・オブジェクトに固有のログ出力を構成するには、次を実行します。
- そのプール・データソースの名前でログ出力のレベルを設定します。
- 適切なロギング・レベルを設定します。
ノート:
ログ出力のレベルを指定しない場合は、ucp.diagnostic.loggingLevel
に設定されているデフォルト・レベルが使用されます。
例14-1 ロギング構成ファイル
次に、UCP診断ロギング構成ファイルの例を示します。
oracle.ucp.level=FINE
handlers = java.util.logging.FileHandler
java.util.logging.FileHandler.pattern = ./test.log
java.util.logging.FileHandler.limit = 0
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
pool-name1=FINEST
pool-name2=SEVERE
ロギング・レベル
UCP診断フレームワークのロギング・レベルは、java.util.logging
パッケージで使用可能なものと同じですが、UCPではInteger.MIN_VALUE
からInteger.MAX_VALUE
までの範囲の数値ロギング・レベルもサポートされています。次の表に、有効なすべてのロギング・レベルを示します。
ロギング・レベル | 値 |
---|---|
OFF |
Integer.MAX_VALUE |
SEVERE |
1000 |
WARNING |
900 |
INFO |
800 |
CONFIG |
700 |
FINE |
500 |
FINER |
400 |
FINEST |
300 |
ALL |
Integer.MIN_VALUE |
14.3.4 監視するエラー・コードのトレース
トレース・バッファを適切なログ出力にダンプするトリガーとなるイベント・タイプは2つあります。
SEVERE
ログ・レベルのログ・メッセージ。- JDBCドライバまたはUCPによってスローされる
java.lang.Throwable
クラスのサブクラスなど、一部の例外またはエラー。これらのエラーまたは例外は内部で捕捉され、WARNING
レベルでログに記録されます。これらの例外のサブセットは、ucp.diagnostic.errorCodesToWatchList
プロパティで定義されます。
WARNING
ログ・メッセージ(java.lang.Throwable
のサブクラスを含む)では、エラー・コードのリストに例外が見つかった場合、トレース・バッファをログ出力にダンプできます。例外にエラーまたは例外のスタックが含まれている場合、UCPはそのスタックを横断し、一致する例外および対応するエラー・コード(該当する場合)を見つけようとします。エラー・コードのリストの形式は次のとおりです。
["<subclass1>.<Exception1>:111,222,333", "<subclass2>.<Exception2>:444,555,666", "<subclass3>.<Exception3>"]
ここで、subclass1.Exception1
、subclass2.Exception2
およびsubclass3.Exception3
はjava.lang.Throwable
サブクラスです。
たとえば、次のようなエラー・コードが表示された場合:
[ "oracle.ucp.UniversalConnectionPoolException:45054,45065,45067",
"java.sql.SQLException:12521,12514,12757,12523",
"java.lang.IllegalStateException", "java.lang.NullPointerException" ]
これは、トレースが次の順序でトリガーされることを意味します。
- ベンダー・エラー・コード45054、45065および45067を含む
oracle.ucp.UniversalConnectionPoolException
- ベンダー・エラー・コード12521、12514、12757および12523を含む
java.sql.SQLException
IllegalStateException
NullPointerException
完全修飾されたjava.lang.Throwable
サブクラス名のみが、トレース・バッファをログ出力にダンプできます。たとえば、java.sql.NullPointerException
は有効な名前ですが、NullP
、NullPointerException
、["12154"]
、["ORA-"]
または["ORA-12154"]
は有効ではありません。誤って指定した場合、サブクラス名は解析エラーまたはクラス解決エラー(あるいはその両方)をWARNING
とともにログに記録します。数値変換エラーでも、WARNING
とともに解析エラーがログに記録される場合があります。
解析およびクラス解決が失敗した場合、すべてのWARNING
ログ・レコードに例外が発生すると、トレース・バッファがダンプされます。これは、例外タイプと指定のエラー・コードには関係ありません。ロギング・モードでエラー・コードが無視されると、解析されなくなります。
エラー・コードのカンマ区切りリストは、次の2つのクラスとそのサブクラスの場合にのみ使用されます。
java.sql.SQLException
およびそのサブクラス(java.sql.SQLRecoverableException
やjava.sql.SQLSyntaxError
など)oracle.ucp.UniversalConnectionPoolException
およびそのサブクラス(NoAvailableConnectionsException
など)
他の例外タイプとともにエラー・コードのカンマ区切りリストを指定した場合、それらのエラー・コードは無視されます。前述の2つの例外とそのサブクラスに対するエラー・コードのリストが空の場合、すべてのエラー・コードを適用できます。UCP診断には、デフォルトのエラー・コード・リストがあります。oracle.UCP.UniversalConnectionPoolException
エラー・コードのリストは、「UCP例外エラー・コード」を参照してください。
トレース・バッファを例外のあるWARNING
メッセージによってダンプする場合は、次のように実行できます。
例14-2 例外によってトレースをダンプする場合
"["java.lang.Throwable"]"
14.3.5 UCP診断用のMBeans
ucp.admin
: JVM全体に対する属性および操作が含まれています。すべてのプール・データソースに関連付けられたバッファ、および一般的なインメモリー・バッファを管理します。次のMBean属性の初期値を変更して設定できます。enableTrace
enableLogging
loggingLevel
bufferSize
errorCodesToWatchList
loggingConfigFileName
また、
dumpInMemoryTrace
という操作もあります。この操作を起動すると、すべてのインメモリー・バッファの内容を適切なログ出力にダンプできます。ucp.admin.UniversalConnectionPoolMBean
: 既存のプール・インスタンスのツリーが含まれています。すべてのインスタンスには、その特定のプールの適切なプロパティを変更する独自の属性があります。属性は次のとおりです。enableTrace
enableLogging
loggingLevel
inMemoryTraceSize