この章では、Sun GlassFishTM Enterprise Server v3 環境で、ロギングを設定する手順とログ情報を表示する手順について説明します。
ここでは、次のテーマを取り上げます。
これらのタスクの実行とプロパティーの編集を 管理コンソール を使用して行う場合の手順は、管理コンソール のオンラインヘルプで説明します。
「ロギング」は、構成エラー、セキュリティー障害、サーバーの不完全な動作といったサーバーの動作中に発生したイベントに関する情報を、Enterprise Server が取得するための処理です。このデータはログファイルに記録され、通常は問題が発生したときの主要な情報源となります。ログファイルの解析は、サーバーの健全性を判断する際に役立ちます。
アプリケーションコンポーネントでは Apache Commons Logging Library を使用してメッセージを記録することもできますが、より適切なログ構成を行うには、プラットフォーム標準の JSR 047 API をお勧めします。
ここでは、次のテーマを取り上げます。
Enterprise Server のログレコードはサーバーログに記録されます。デフォルトのサーバーログの名前は server.log で、通常は domain-dir/logs に保存されます。サーバーログのデフォルトの名前または場所は、管理コンソール を使用して変更できます。
サーバーログのほかに、domain-dir/logs ディレクトリには次のログも保存されます。
HTTP サービスアクセスログ (/access サブディレクトリ)
トランザクションサービスログ (/tx サブディレクトリ)
サーバーログのサイズが指定された値 (バイト単位) に達すると、ログはローテーションされ、タイムスタンプを付加した server.log_ date という名前に変更されます。date は、ファイルがローテーションされた日時を表します。ログファイルのローテーションは、「サーバーログのローテーション」の手順に従って手動で行うこともできます。
Enterprise Server のログレコードは、次の統一形式に従います。
|
[#|yyyy-mm-ddThh:mm:ss.SSS-Z|Log Level|ProductName-Version|LoggerName|Key Value Pairs|Message|#] |
[# と #] はレコードの開始と終了をマーク付けします。
垂直線 (|) は、レコードのフィールドを区切ります。
yyyy-mm-ddThh:mm:ss.SSSS-Z は、レコードが作成された日時を表します。たとえば、2006-10-21T13:25:53.852-0400 です。
Log Level は、指定したログレベルを表します。ログレベルには、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、および FINEST のいずれかの値を選択できます。デフォルトは、「INFO」です。
ProductName-Version は、Enterprise Server の現在のバージョンを表します。たとえば、glassfish です。
LoggerName は、ログモジュールのソースを識別する階層ロガーの名前空間です。たとえば、javax.enterprise.system.core です。
Key Value Pairs は、キーの名前と値のペア (通常はスレッド ID) を表します。たとえば、_ThreadID=14; です。
Message は、ログメッセージのテキストです。Enterprise Server のすべての SEVERE および WARNING のメッセージと、多くの INFO メッセージは、モジュールコードと数値で構成されるメッセージ ID で始まります。たとえば、CORE5004 です。
ログレコードの例を次に示します。
[#|2006-10-21T13:25:53.852-0400|INFO|GlassFish10.0|javax.enterprise. system.core|_ThreadID=13;|CORE5004: Resource Deployed: [cr:jms/DurableConnectionFactory].|#]
管理コンソール では、ログレコードがわかりやすい形式で表示されます。
list-logger-levels(1) サブコマンドを使用して、モジュールの既存のロガーを一覧表示できます。次に例を示します。
javax.enterprise.system.container.cmp: INFO javax.enterprise.system.tools.admin: INFO javax.enterprise.system.container.web: INFO javax.enterprise.system.util: INFO javax.enterprise.resource.webcontainer.jsf.timing: INFO javax: INFO javax.enterprise.resource.corba: INFO javax.enterprise.system.core.naming: INFO javax.enterprise.system.core.selfmanagement: INFO javax.enterprise.system.container.ejb: INFO javax.enterprise.resource.webcontainer.jsf.config: INFO javax.enterprise.resource.javamail: INFO org.apache.catalina: INFO javax.enterprise.system.core.config: INFO javax.enterprise.system.webservices.rpc: INFO javax.enterprise.system.webservices.registry: INFO javax.enterprise.system.tools.deployment: INFO javax.enterprise.resource.jms: INFO javax.enterprise.system: INFO javax.enterprise.system.webservices.saaj: INFO org.apache.jasper: INFO javax.enterprise.resource.webcontainer.jsf.lifecycle: INFO javax.enterprise.resource.jta: INFO javax.enterprise.resource.jdo: INFO javax.enterprise.resource.resourceadapter: INFO javax.enterprise.system.core.transaction: INFO javax.enterprise.resource.webcontainer.jsf.resource: INFO javax.enterprise.system.core.security: INFO javax.enterprise.resource.webcontainer.jsf.application: INFO javax.enterprise.system.core.classloading: INFO org.apache.coyote: INFO javax.enterprise.resource.webcontainer.jsf.managedbean: INFO javax.enterprise.system.container.ejb.mdb: INFO javax.enterprise.resource.webcontainer.jsf.context: INFO javax.enterprise.resource.webcontainer.jsf.renderkit: INFO javax.enterprise.resource.webcontainer.jsf.facelets: INFO javax.enterprise.resource.webcontainer.jsf.taglib: INFO |
「ログレベル」は、ログに記録するメッセージの粒度を決定します。ここには、エラーのみ (SEVERE) から詳細なデバッグ情報 (FINEST) までのいずれかを指定します。選択できる値は、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、および FINEST です。各ログレベルは上位のレベルを含みます。つまり、特定のログレベル (たとえば、INFO) を設定した場合、これより上位のログレベル (SEVERE および WARNING) のメッセージも記録されます。もっとも低いログレベル (FINEST) に設定した場合、出力にはファイルのすべてのメッセージが含まれます。デフォルト設定は、INFO です。
ログレベルの設定には、グローバル設定とロガー固有の設定の 2 つを利用できます。ロガー固有の設定を選択し、この設定がグローバル設定と異なる場合は、ロガー固有の設定が優先されます。
グローバルログレベルを設定するには、logging.properties ファイルを編集します。モジュールごとのログレベルは、この節で説明するように asadmin サブコマンドを使用して設定します。
ログレベルの設定は動的な処理であるため、変更を有効にするために Enterprise Server を再起動する必要はありません。
ここでは、次のテーマを取り上げます。
モジュールと各モジュールの現在のログレベルを一覧表示するには、リモートモードで list-logger-levels サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-logger-levels(1) サブコマンドを使用して、既存のモジュールのロガーを一覧表示します。
この例では、既存のロガーの一部と、各ロガーで設定されているログレベルを一覧表示します。
asadmin> list-logger-levels javax.enterprise.system.container.cmp: INFO javax.enterprise.system.tools.admin: INFO java.util.logging.ConsoleHandler: FINEST javax.enterprise.system.container.web: INFO javax.enterprise.system.util: INFO javax.enterprise.resource.webcontainer.jsf.timing: INFO javax: INFO javax.enterprise.resource.corba: INFO ... Command list-logger-levels executed successfully. |
コマンド行に asadmin help list-logger-levels と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
「グローバルログレベル」は、すべてのロガーで記録されるイベントの種類を指定します。コンソールへのメッセージ出力のデフォルトレベルは INFO です。このレベルには、SEVERE と WARNING のメッセージも含まれます。
グローバルロギングは、logging.properties ファイルを編集して設定します。デフォルトの logging.properties ファイルは、domain.xml ファイルと同じディレクトリにあり、通常は domain-dir/config に保存されています。java.util.logging.config.file システムプロパティーにファイル名を指定して、別のファイルを選択することもできます。たとえば、次のように指定します。
java -Djava.util.logging.config.file=myfile |
ConsoleHandler には、表示されるメッセージを制限する独立したログレベル設定があります。次に例を示します。
java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = com.sun.enterprise.server.logging.UniformLogFormatter |
ログレベルをルートレベルで設定すると、すべてのロガーのレベルを設定できます。この例では、すべてのロガーのログレベルを INFO に設定します。
.level= INFO
「モジュールログレベル」は、特定のロガーで記録するイベントの種類を指定します。コンソールへのメッセージ出力のデフォルトレベルは INFO です。このレベルには、SEVERE と WARNING のメッセージも含まれます。グローバルログレベルは、モジュールに固有のログレベルで上書きされます。
デフォルトでは、モジュールログレベルは FINE に設定されます。ロガーを設定する行は次のようになります。太字はモジュールを示しています。
#javax.enterprise.system.tools.level=FINE #javax.enterprise.system.container.ejb.level=FINE #javax.enterprise.system.core.security.level=FINE #javax.enterprise.system.tools.admin.level=FINE #javax.enterprise.level=FINE #javax.enterprise.system.container.web.level=FINE |
ログレベルの設定は動的な処理であるため、変更を有効にするために Enterprise Server を再起動する必要はありません。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-logger-levels(1) サブコマンドを使用して、既存のモジュールのロガーを一覧表示します。
set-log-level(1) サブコマンドを使用して、モジュールのログレベルを設定します。
選択できる値は、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、および FINEST です。
この例では、Web コンテナロガーのログレベルを FINE に設定します。
asadmin> set-log-level javax.enterprise.system.container.web.level=FINE Command set-log-level executed successfully. |
この例では、セキュリティーロガーと Web コンテナロガーのログレベルを設定します。
asadmin> set-log-level javax.enterprise.system.core.security.level=FINE javax.enterprise.system.container.web=WARNING Command set-log-level executed successfully. |
コマンド行に asadmin help set-log-level と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
ログは logging.properties ファイルの設定に従って自動的にローテーションされます。これらの設定は 管理コンソール を使用して変更できます。
サーバーログファイルを手動でローテーションするには、リモートモードで rotate-log サブコマンドを使用します。デフォルトの場所にあるサーバーログは、ただちにタイムスタンプ付きの名前に変更され、新しいサーバーログが作成されます。
ログのローテーションは動的な処理であるため、変更を有効にするために Enterprise Server を再起動する必要はありません。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
rotate-log(1) サブコマンドを使用して、ログをローテーションします。
この例では、server.log ファイルの名前を yyyy-mm-dd_server.log に変更し、デフォルトの場所に新しい server.log ファイルを作成します。
asadmin> rotate-log Command rotate-log executed successfuly. |
コマンド行に asadmin help rotate-log と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
デフォルトでは、すべてのロギング情報は server.log ファイルに記録されます。このファイルは、通常 domain-dir /logs に保存されます。ロギング情報は、管理コンソール のログビューアを使用して表示できます。管理コンソール のロギング機能を使用する手順は、管理コンソール のオンラインヘルプで説明します。
特定のモジュールで収集された情報を表示するには、server.log ファイルをテキストエディタで開き、対象のモジュールを検索します。