この章では、OC4Jにデプロイされるアプリケーションへのロギング機能の実装に関するOracleのガイドラインについて説明します。これにより、次のトピックで説明するように、Javaの標準のロギング・フレームワークを使用するアプリケーションで、JavaロギングをOracle Diagnostic Logging(ODL)と統合し、オラクル社が提供するログ分析ツールを利用することが可能になります。
OC4Jでのロギングの構成と使用方法については、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
ここでは、JavaとOracleのロギング・フレームワークの概要、および両者を統合してJavaのログ出力をOracle形式で生成できるようにする方法について説明します。
JDK 1.4で導入されたJavaロギング・フレームワークは、java.util.logging
パッケージを通して広範なロギングAPIを提供します。java.util.logging
パッケージの概要については、http://java.sun.com/j2se/1.4.2/docs/api/overview-summary.html
を参照してください。
Javaロギング・フレームワークの概要については、Sun社のサイトでhttp://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html
を参照してください。
Oracle Diagnostic Loggingフレームワーク(ODL)は、Javaの標準フレームワークを補完してログ・データをOracleログ分析ツールに自動的に統合するプラグイン・コンポーネントを提供します。ODLフレームワークではログ・ファイルはXML形式で作成されるため、Oracle Application Serverや独自に開発したコンポーネントで、より簡単に解析および再利用することができます。
ODLフレームワークでは、ログ・ファイルのローテーションなどのログ・ファイル管理機能がサポートされています。ログ・ファイルの最大サイズとログ・ディレクトリの最大サイズも定義できます。
ODL形式のログ・ファイルは、WebベースのOracle Enterprise Manager 10g Application Server Controlコンソールで表示できるため、管理者は、集中管理を行っている場所から、OC4J内で稼働しているすべてのコンポーネントとアプリケーションで生成されたログ出力を集約して表示できます。OC4Jインスタンスで生成されたログ・ファイルを表示する方法については、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
Javaロギング・フレームワークでは、アプリケーションはjava.util.logging.Logger
クラスのインスタンスであるLoggerオブジェクトを呼び出して、イベントを記録します。Loggerは、システムまたはアプリケーションのコンポーネントと関連付けられた名前付きエンティティです。各Loggerには特定のログ・レベルが割り当てられ、重大度がそのレベル以上のイベントのみを記録します。
ロギング・メッセージはHandlerオブジェクトに転送され、そこからさらに様々な宛先に転送されて公開されます。oracle.core.ojdl.logging
パッケージには、Loggerの出力をXMLベースのODL形式で生成するHandlerクラスであるODLHandler
が含まれます。
次の項目では、Oracle Diagnostic Loggingフレームワークを統合するJava Loggerを実装するためのガイドラインについて説明します。
Java Loggerは名前付きエンティティであり、階層的なドット区切りのネームスペースを使用して名前が付けられます。Loggerのネームスペースはグローバルであり、OC4J内で稼働するすべてのアプリケーションで共有されます。そのため、名前の競合が発生しないよう、個々のLogger名を一意にする必要があります。
Loggerの名前には、ベンダー名とコンポーネント名を含む必要があり、オプションとしてモジュールまたはサブモジュールを含むことができます。Loggerの名前には、次の命名規則を使用してください。
vendorName.componentName[.moduleName][.subModuleName]
次に例を示します。
acme.mycomponent.mymodule
Javaロギング・フレームワークでは、ログ・レベルはjava.util.logging.Level
クラスのオブジェクトで表されます。このクラスでは、SEVERE(最も優先度が高く、最も大きい値)からFINEST(最も優先度が低く、最も小さい値)までの7つの標準ログ・レベルが定義されています。
アプリケーションでは、可能なかぎりこれらの定義済Javaログ・レベルを利用する必要があります。これらのレベルには、Oracle Diagnostic Logging(ODL)メッセージ・タイプおよびレベルに対するOC4Jマップの一部として、Oracle診断ツールが提供されています。
表4-1では、事前定義済のJavaログ・レベルとODLのメッセージ・タイプおよびレベルの間のマッピングを示します。ODLのログ・レベルは1
〜32
で、値が小さいほど重大度が高く情報量が少なくなります。
表4-1 Javaのログ・レベルとODLのメッセージ・タイプおよびログ・レベルのマッピング
Javaのログ・レベル | ODLのメッセージ・タイプ:ログ・レベル | ODLの説明 |
---|---|---|
SEVERE.intValue()+100 |
INTERNAL_ERROR:1 |
プログラムで内部的な例外または予期しないリカバリ不可能な例外に対するエラーが発生しました。 |
SEVERE |
ERROR:1 |
システム管理者の介入を必要とする問題が発生しました。 |
WARNING |
WARNING:1 |
確認し、場合によってはエラーが発生する前に対処する必要のある、アクションまたは状況が検出されました。 |
INFO |
NOTIFICATION:1 |
通常のアクションまたはイベントのレポートです。ログイン完了などのユーザー操作や、ログ・ファイルのローテーションなどの自動的な操作です。 |
CONFIG |
NOTIFICATION:16 |
構成に関するメッセージまたは問題です。 |
FINE |
TRACE:1 |
デバッグまたはパフォーマンスの監視に使用されるトレース・メッセージまたはデバッグ・メッセージです。通常は、詳細なイベント・データが含まれます。 |
FINER |
TRACE:16 |
かなり詳細なトレース・メッセージまたはデバッグ・メッセージです。 |
FINEST |
TRACE:32 |
非常に詳細なトレース・メッセージまたはデバッグ・メッセージです。 |
Oracle診断ツールは、アプリケーションで実装されるカスタム・ログ・レベルに対応するために、ある程度の柔軟性を備えています。ただし、デフォルトの7つのJavaレベル(SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST)にログ・レベルを含めることをお薦めします。
Java LoggerでODL形式のログ・メッセージを出力するには、各LoggerをODLHandler
にマップします。このマッピングは、ロギング構成ファイルj2ee-logging.xml
を通して管理されます。このファイルは、OC4JによってORACLE_HOME
/j2ee/
instance
/config
ディレクトリに生成されます。
OC4J 10g(10.1.3.1.0)では、Application Server Controlコンソールを使用して、次のようにログ出力のためのログ・レベルを設定できます。
OC4Jのホームページで「管理」
をクリックします。
「ログ出力の構成」ページを表示するには、管理タスクから「ログ出力の構成」
を選択します。
OC4Jインスタンス用にロードしたログ出力のリスト全体を表示するには、「すべてを開く」
をクリックします。
このページに表示されるログ出力について、ログ・レベルを選択します。
j2ee-logging.xml
構成ファイルを手動で編集することもできます。このファイルを変更した後は、OC4Jを再起動します。
この構成ファイルには、<logging-configuration>
ルート要素の下に2つの要素が含まれています。
<log_handlers>
この要素は、OC4J内の1つ以上のHandlerを定義します。1つ以上の<log_handler>
要素を含み、それぞれがHandlerの名前とそのインスタンスを生成するクラスを定義します。デフォルトでは、この要素は3つの異なるログ・ハンドラを定義する<log_handler>
を含みます。
oc4j-handler
これはoracle
ログ出力のためのログ・ハンドラです。
oracle-webservices-management-auditing-handler
これはoracle.webservices.management.auditingログ出力のためのログ・ハンドラです。
oracle-webservices-management-logging-handler
これはoracle.webservices.management.loggingログ出力のためのログ・ハンドラです。
Handlerの名前は、LoggerにHandlerを割り当てるために<logger>
要素(後で説明します)の中のみで使用されます。
Handlerクラスは、java.util.logging.Handler
のサブクラス、またはHandlerFactory
インタフェースを実装するクラスです。クラスがjava.util.logging.Handler
サブクラスである場合は、そのクラスに対するデフォルトのコンストラクタを使用してHandlerインスタンスが作成されます。
HandlerFactory
インタフェースを実装するクラスの場合は、Handlerに対する追加の構成プロパティを指定できます。利用できる唯一のHandlerFactory
クラスはoracle.core.ojdl.logging.ODLHandlerFactory
で、ODLHandler
インスタンスを構成するために使用できます。
ODLHandlerFactory
クラスでは、次のプロパティを使用できます。これらは<property>
サブ要素で指定します。
path
: Handlerがログ・ファイルを生成するディレクトリを指定します。ODLHander
の場合は、指定したディレクトリにODL形式のすべてのログが格納されます。この値は修正しないでください。
maxFileSize
: ディレクトリ内のログ・ファイルに許可される最大サイズをバイト単位で設定します。ファイルがこの限度を超えると、新しいファイルが生成されます。
maxLogSize
: ログ・ファイル・ディレクトリに許可される最大サイズをバイト単位で設定します。この限度を超えると、ログ・ファイルは最も古いものから順番にパージされます。
<loggers>
この要素では、個々の名前付きLoggerと、そのメッセージを処理するODLHandler
などの特定のHandlerのマッピングを定義します。各マッピングは<logger>
要素で定義し、次の項目が含まれます。
name
: Loggerの名前。
level
: Loggerが機能する最低のログ・レベル。このレベルは、Javaのログ・レベル(FINE
)またはODLメッセージ・タイプ:ログ・レベル(TRACE:1
)になります。
useParentHandlers
: Loggerが親のHandlerを使用する必要があるかどうかを示します。この値のデフォルトはtrue
です。
<handler>
: 使用するHandlerの名前。<log_handler>
要素で定義されています。指定できるのは<log_handler>
要素で定義されているHandlerのみであることに注意してください。
次に示す例は、j2ee-logging.xml
での、ODLHandler
の定義と、デフォルトのoracle
Loggerおよびカスタムのacme.scheduler
LoggerのODLHandler
に対するマッピングです。
<logging_configuration> <log_handlers> <log_handler name='oc4j-handler' class='oracle.core.ojdl.logging.ODLHandlerFactory'> <property name='path' value='%ORACLE_HOME%/j2ee/log/oc4j'/> <property name='maxFileSize' value='10485760'/> <property name='maxLogSize' value='104857600'/> </log_handler> </log_handlers> <loggers> <logger name='oracle' level='NOTIFICATION:1' useParentHandlers='false'> <handler name='oc4j-handler'/> </logger> <logger name='acme.scheduler' level='TRACE:1' useParentHandlers='false'> <handler name='oc4j-handler'/> </logger> </loggers> </logging_configuration>