この章では、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ロギングを有効化できます。
CONFIG
FINE
FINER
FINEST
ALL
これらのログ・レベルの詳細および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のインスタンスまたはグループを起動します。