この章では、ロギングの設定方法とサーバーログの表示方法について簡単に説明します。この章は、次の節で構成されます。
Application Server は、JSR 047 に指定されている「Java 2 platform Logging API」を使用します。Application Server のログメッセージはサーバーログ内に記録されます。このサーバーログの場所は通常、domain-dir/logs/server.log です。
domain-dir/logs ディレクトリには、サーバーログのほかに別の 2 種類のログも格納されます。access サブディレクトリには HTTP サービスアクセスログ、tx サブディレクトリにはトランザクションサービスログがあります。これらのログについては、管理コンソール のオンラインヘルプを参照してください。
Application Server のコンポーネントがログ出力を生成します。アプリケーションコンポーネントもログ出力を生成できます。
アプリケーションコンポーネントは、Apache Commons ロギングライブラリを使ってメッセージをロギングしてもかまいません。ただし、ログ設定を効率的に行いたい場合は、プラットフォーム標準の JSR 047 API を使用することをお勧めします。
ログレコードは次の統一形式に従います。
[#|yyyy-mm-ddThh:mm:ss.SSS-Z|Log Level|ProductName-Version|LoggerName|Key Value Pairs|Message|#]
次に例を示します。
[#|2004-10-21T13:25:53.852-0400|INFO|sun-appserver-e8.1|javax.enterprise. system.core|_ThreadID=13;|CORE5004: Resource Deployed: [cr:jms/DurableConnectionFactory].|#]
この例で、
[# と #] はレコードの開始と終了をマーク付けします。
垂直バー (|) はレコードのフィールドを区切ります。
2004-10-21T13:25:53.852-0400 は日付と時刻を指定します。
Log Level は INFO です。このレベルは次のいずれかの値を取ることができます。SEVERE、WARNING、INFO、CONFIG、FINE、FINER、および FINEST 。
ProductName-Version は sun-appserver-ee8.1 です。
LoggerName はログモジュールのソースを識別する階層ロガーの名前空間で、この場合は javax.enterprise.system.core です。
Key Value Pairs はキー名と値で、通常は _ThreadID=14; のようなスレッド ID です。
Message は、ログメッセージのテキストです。Application Server のすべての SEVERE メッセージと WARNING メッセージ、および多くの INFO メッセージは、モジュールコードと数値から構成されるメッセージ ID (この場合は CORE5004) で始まります。
このログレコード形式は、将来のリリースでは変更または拡張される可能性があります。
この節では、java.util.logging パッケージを使用して Application Server のロギングサブシステムにアクセスするアプリケーションのカスタムロギングレベルを設定する方法について説明します。
java.util.logging パッケージは、ロガーインスタンスを作成できる階層型の名前空間を提供します。特定のロギングレコードが Application Server インスタンスのログファイルに出力されるかどうかは、ログレコードのログレベルと指定したログレベルによって異なります。
Application Server のロガー設定では、20 を超えるロギングモジュールが提供され、Application Server 独自の内部ロギングを詳細に制御できます。また、モジュール名とそのモジュールで使用するロギングレベルを指定することで、カスタムログモジュールを追加作成するオプションもあります。
ここで重要なのは、ロガーは静的な名前であり、継承されないということです。そのため、カスタムロガーが com.someorg.app という名前で設定された場合、アプリケーションがロガー com.someorg.app.submodule を検索しても、com.someorg.app からの設定を継承するロガーは提供されません。代わりに com.someorg.app.submodule には、INFO レベルまたはそれ以上のレベルでロギングするように設定されたデフォルトのロガーがあります。
アプリケーションでロガーの継承を使用する必要がある場合は、Application Server を実行するために使用している Java ランタイムの logging.properties ファイルを編集して設定することができます。たとえば、次のエントリを logging.properties ファイルに追加すると、FINE レベルを継承する com.someorg.app.submodule が作成されます。
com.someorg.app.level = FINE
Java ロギング API の詳細は、http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/package-summary.html にある Java ドキュメントや、その他の java.util.logging クラスのドキュメントを参照してください。
Application Server では、モジュールごとにロガーが用意されています。次の表では、管理コンソール の「ログレベル」ページに表示されるとおりに、アルファベット順でモジュールの名前と各ロガーの名前空間を示します。表内の最後の 3 つのモジュールは、「ログレベル」ページには表示されません。
表 15–1 Application Server ロガー名前空間
モジュール名 |
名前空間 |
---|---|
管理 |
javax.enterprise.system.tools.admin |
クラスローダー |
javax.enterprise.system.core.classloading |
CMP |
javax.enterprise.system.container.cmp |
構成 |
javax.enterprise.system.core.config |
コネクタ |
javax.enterprise.resource.resourceadapter |
CORBA |
javax.enterprise.resource.corba |
導入 |
javax.enterprise.system.tools.deployment |
EJB コンテナ |
javax.enterprise.system.container.ejb |
JavaMail |
javax.enterprise.resource.javamail |
JAXR |
javax.enterprise.resource.webservices.registry |
JAX-RPC |
javax.enterprise.resource.webservices.rpc |
JDO |
javax.enterprise.resource.jdo |
JMS |
javax.enterprise.resource.jms |
JTA |
javax.enterprise.resource.jta |
JTS |
javax.enterprise.system.core.transaction |
MDB コンテナ |
javax.enterprise.system.container.ejb.mdb |
ネーミング |
javax.enterprise.system.core.naming |
ノードエージェント (Enterprise Edition に限る) |
javax.ee.enterprise.system.nodeagent |
Root |
javax.enterprise |
SAAJ |
javax.enterprise.resource.webservices.saaj |
セキュリティー |
javax.enterprise.system.core.security |
サーバー |
javax.enterprise.system |
同期 (Enterprise Edition に限る) |
javax.ee.enterprise.system.tools.synchronization |
ユーティリティー |
javax.enterprise.system.util |
ベリファイア |
javax.enterprise.system.tools.verifier |
Web コンテナ |
javax.enterprise.system.container.web |
コアシステムサポート |
javax.enterprise.system.core |
システム出力 (System.out.println) |
javax.enterprise.system.stream.out |
システムエラー (System.err.println) |
javax.enterprise.system.stream.err |