この章では、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で表示できるため、管理者は、集中管理を行っている場所から、Oracle Application Server内で稼働しているすべてのコンポーネントとアプリケーションで生成されたログ出力を集約して表示できます。OC4Jインスタンスで生成されたログ・ファイルの表示に関する情報は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
Javaロギング・フレームワークでは、アプリケーションはjava.util.logging.LoggerクラスのインスタンスであるLoggerオブジェクトを呼び出して、イベントを記録します。ログ出力は、システムまたはアプリケーションのコンポーネントと関連付けられた名前付きエンティティです。各ログ出力には特定のログ・レベルが割り当てられ、重大度がそのレベル以上のイベントのみを記録します。
ロギング・メッセージはHandlerオブジェクトに転送され、そこからさらに様々な宛先に転送されて公開されます。oracle.core.ojdl.loggingパッケージには、ログ出力の出力をXMLベースのODL形式で生成するハンドラ・クラスであるODLHandlerが含まれます。
次の項目では、Oracle Diagnostic Loggingフレームワークを統合するJavaログ出力を実装するためのガイドラインについて説明します。
Javaログ出力は名前付きエンティティであり、階層的なドット区切りのネームスペースを使用して名前が付けられます。Loggerのネームスペースはグローバルであり、OC4J内で稼働するすべてのアプリケーションで共有されます。そのため、名前の競合が発生しないよう、個々のログ出力名を一意にする必要があります。
ログ出力の名前には、ベンダー名とコンポーネント名を含む必要があり、オプションとしてモジュールまたはサブモジュールを含むことができます。ログ出力の名前には、次の命名規則を使用してください。
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ログ出力でODL形式のログ・メッセージを出力するには、各ログ出力をODLHandlerにマップします。このマッピングは、ロギング構成ファイルj2ee-logging.xmlを通して管理されます。このファイルは、OC4JによってORACLE_HOME/j2ee/instance/configディレクトリに生成されます。
Application Server Controlでログ出力のログ・レベルを設定する手順:
OC4Jのホームページで「管理」をクリックします。
「ログ出力の構成」ページを表示するには、管理タスクから「ログ出力の構成」を選択します。
OC4Jインスタンス用にロードしたログ出力のリスト全体を表示するには、「すべてを開く」をクリックします。
このページに表示されるログ出力について、ログ・レベルを選択します。
j2ee-logging.xml構成ファイルを手動で編集することもできます。このファイルを変更した後は、OC4Jを再起動します。
この構成ファイルには、<logging-configuration>ルート要素の下に2つの要素が含まれています。
<log_handlers>
この要素は、OC4J内の1つ以上のハンドラを定義します。1つ以上の<log_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ログ出力のためのログ・ハンドラです。
ハンドラの名前は、ログ出力にハンドラを割り当てるために<logger>要素(後で説明します)の中のみで使用されます。
ハンドラ・クラスは、java.util.logging.Handlerのサブクラス、またはHandlerFactoryインタフェースを実装するクラスです。クラスがjava.util.logging.Handlerサブクラスである場合は、そのクラスに対するデフォルトのコンストラクタを使用してハンドラ・インスタンスが作成されます。
HandlerFactoryインタフェースを実装するクラスの場合は、ハンドラに対する追加の構成プロパティを指定できます。利用できる唯一のHandlerFactoryクラスはoracle.core.ojdl.logging.ODLHandlerFactoryで、ODLHandlerインスタンスを構成するために使用できます。
ODLHandlerFactoryクラスでは、次のプロパティを使用できます。これらは<property>サブ要素で指定します。
path: ハンドラがログ・ファイルを生成するディレクトリを指定します。ODLHanderの場合は、指定したディレクトリにODL形式のすべてのログが格納されます。この値は修正しないでください。
maxFileSize: ディレクトリ内のログ・ファイルの最大サイズをKB単位で設定します。ファイルがこの限度に達すると、新しいファイルが生成されます。
maxLogSize: ログ・ファイル・ディレクトリに許可される最大サイズをMB単位で設定します。この限度を超えると、ログ・ファイルは最も古いものから順番にパージされます。
<loggers>
この要素では、個々の名前付きログ出力と、そのメッセージを処理するODLHandlerなどの特定のハンドラのマッピングを定義します。各マッピングは<logger>要素で定義し、次の項目が含まれます。
name: ログ出力の名前。
level: ログ出力が機能する最低のログ・レベル。このレベルは、Javaのログ・レベル(FINE)またはODLメッセージ・タイプ:ログ・レベル(TRACE:1)になります。
useParentHandlers: ログ出力が親のハンドラを使用する必要があるかどうかを示します。この値のデフォルトはtrueです。
<handler>: 使用するハンドラの名前。<log_handler>要素で定義されています。指定できるのは<log_handler>要素で定義されているハンドラのみです。
次に示す例は、j2ee-logging.xmlでの、ODLHandlerの定義と、デフォルトのoracleログ出力およびカスタムのacme.schedulerログ出力の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>
oracle.http.client:10.1.3システム・ライブラリとしてインストールされるOracle HTTPClientは、設定時および通信時のアクティビティを記録します。HTTPClientバージョン10.1.3以上では、標準のJDKロギングAPI(java.util.logging)が使用されます。HTTPClientのルート・ログ出力は、HTTPClientです。
次のいずれかの機能を使用して、スタンドアロンOC4J、またはOC4JのインスタンスやグループのHTTPClientロギングを有効化、無効化および管理できます。
Oracle Diagnostic Logging(ODL)フレームワーク
ODLは、Javaロギング・フレームワークと連動し、Oracleログ分析ツールを使用してログ・データを統合します。ODLフレームワークを使用すると、j2ee-logging.xml構成ファイルでHTTPClientロギングを有効化できます。このファイルの詳細は、「ODLフレームワークを使用するためのJavaログ出力の構成」を参照してください。ODLとJavaロギング・フレームワークの連動の詳細は、「JavaとOracleのロギング・フレームワークの概要」を参照してください。
HTTPClient.log.levelシステム・プロパティ
このシステム・プロパティは、java.util.logging.Level値を使用して、HTTPClientロギングを有効化または無効化します。HTTPClientはユーティリティ・ライブラリであり、エラーが発生するアプリケーション・コンテキストを認識しないため、JDKロギング・レベルのトレース部分のみを使用します。アプリケーション用に確保されているSEVERE、WARNINGおよびINFOのロギング・レベルは使用しません。
Javaロギング・フレームワーク
デフォルトでは、HTTPClientロギングは、JVMの起動時に指定されたJDKのjava.util.loggingプロパティによって制御されます。これは、java.util.logging.LogManagerのJavadoc出力に記述されています。通常、JDKロギング・プロパティは、JRE-directory/lib/logging.propertiesファイルで構成されます。
java.util.loggingパッケージの詳細は、「Javaロギング・フレームワーク」を参照してください。
HTTPClientメッセージをOC4Jログにリダイレクトすることもできます。方法は、『Oracle Containers for J2EE構成および管理ガイド』の「LogViewerを使用したOC4Jログのアプリケーション・メッセージの表示」を参照してください。
ODLフレームワークを使用して、j2ee-logging.xml構成ファイルでHTTPClientロギングを有効化できます。このファイルの詳細は、「ODLフレームワークを使用するためのJavaログ出力の構成」を参照してください。
ODLフレームワークでHTTPClientロギングを有効化する手順:
スタンドアロンOC4J、またはOC4Jのインスタンスやグループのj2ee-logging.xmlロギング構成ファイルを編集します。
次のように、HTTPClientログ出力を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='HTTPClient' level='TRACE:1' useParentHandlers='false'>
<handler name='oc4j-handler'/>
</logger>
</loggers>
</logging_configuration>
j2ee-logging.xmlファイルを保存します。
OC4Jを再起動します。
ODLフレームワークでHTTPClientロギングを無効化する手順:
スタンドアロンOC4J、またはOC4Jのインスタンスやグループのj2ee-logging.xmlロギング構成ファイルを編集します。
次に示す、ODLHandlerへのHTTPClientログ出力のマッピングをファイルから削除します。
<logger name='HTTPClient' level='TRACE:1' useParentHandlers='false'> <handler name='oc4j-handler'/> </logger>
j2ee-logging.xmlファイルを保存します。
OC4Jを再起動します。
HTTPClient.log.levelを次のいずれかの標準トレース・ログ・レベルに設定することで、スタンドアロンOC4Jまたはクライアント・サイド・アプリケーションのHTTPClientロギングを有効化できます。
CONFIGFINEFINERFINESTALLこれらのログ・レベルの詳細およびODLのメッセージ・タイプとログ・レベルへのマップ方法は、「ログ・レベルの設定」を参照してください。
Application Server Controlでのログ・レベルの設定方法は、「ODLフレームワークを使用するためのJavaログ出力の構成」を参照してください。
HTTPClient.log.levelをOFFに設定すると、HTTPClientロギングを無効化できます。
Oracle Application ServerでのOC4JのインスタンスまたはグループのHTTPClientロギングは、Oracle Process Manager and Notification Server(OPMN)の構成ファイルopmn.xmlを任意で設定できる点を除いて、スタンドアロンOC4Jの場合と同じです。また、HTTPClientロギングはシステム出力に送られ、Oracle Application Serverログのいずれかに書き込まれます。
システム・プロパティを使用してOracle Application ServerでOC4JのインスタンスまたはグループのHTTPClientロギングを有効化する手順:
ORACLE_HOME/opmn/conf/opmn.xmlファイルを開きます。
HTTPClientロギングを有効化するOC4Jのインスタンスまたはグループとid属性の値が一致する<process-type>要素を探します。次に例を示します。
<process-type id="OC4J_Portal" module-id="OC4J">
<environment>
<variable id="DISPLAY" value="localhost:0"/>
<variable id="LD_LIBRARY_PATH" value="/private1/iasinst/OraHome_4/lib32:
/private1/iasinst/OraHome_4/lib:/private1/iasinst/OraHome_4/network/lib:
/private1/iasinst/OraHome_4/jdk/jre/lib/sparc"/>
</environment>
<module-data>
<category id="start-parameters">
<data id="java-options" value="-server
-Djava.security.policy=/private1/iasinst/OraHome_4/j2ee/OC4J_Portal/config/java2.policy
-Djava.awt.headless=true -Xmx256m "/>
<category>要素start-parametersの下にあるid属性の値がjava-optionsである<data>要素のvalue属性でシステム・プロパティを設定して、HTTPClientロギングを有効化します。たとえば、次のようになります。
<category id="start-parameters">
<data id="java-options" value="-server
-Djava.security.policy=/private1/iasinst/OraHome_4/j2ee/OC4J_Portal/config/java2.policy
-Djava.awt.headless=true -Xmx256m
-DHTTPClient.log.level=FINE />
OC4Jのインスタンスまたはグループを起動します。
Oracle Application Serverによって標準出力に書き込まれるHTTPClientログを確認します。
このログは、ORACLE_HOME/opmn/logs/instance_default_1にある可能性があります。
システム・プロパティを使用してOracle Application ServerでOC4JのインスタンスまたはグループのHTTPClientロギングを無効化する手順:
ORACLE_HOME/opmn/conf/opmn.xmlファイルを開きます。
HTTPClientロギングを無効化するOC4Jのインスタンスまたはグループとid属性の値が一致する<process-type>要素を探します。次に例を示します。
<category>要素start-parametersの下にあるid属性の値がjava-optionsである<data>要素のvalue属性で、HTTPClient.log.levelシステム・プロパティをOFFに設定します。たとえば、次のようになります。
<category id="start-parameters">
<data id="java-options" value="-server
-Djava.security.policy=/private1/iasinst/OraHome_4/j2ee/OC4J_Portal/config/java2.policy
-Djava.awt.headless=true -Xmx256m
-DHTTPClient.log.level=OFF>
OC4Jのインスタンスまたはグループを起動します。