この章では、管理コンソールによるロギングの設定方法とサーバーログの表示方法について簡単に説明します。この章には次の節が含まれています。
Application Server は、JSR 047 に指定されている「Java 2 platform Logging API」を使用します。Application Server のログメッセージはサーバーログ内に記録されます。このサーバーログの場所は通常、domain-dir/logs/server.log です。
domain-dir/logs ディレクトリには、サーバーログのほかに別の 2 種類のログも格納されます。access サブディレクトリには HTTP サービスアクセスログ、tx サブディレクトリにはトランザクションサービスログがあります。これらのログについては、「HTTP サービスのアクセスログを設定する」および 「トランザクションの設定」を参照してください。
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) で始まります。
このログレコード形式は、将来のリリースでは変更または拡張される可能性があります。
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 |
ルート |
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 |
ツリーコンポーネントで、「ノードエージェント」ノードまたは「設定」ノードを開きます。
特定のノードエージェントを選択するか、設定するインスタンスを選択します。
ノードエージェントの場合は、「ロガーの設定」タブを選択します。設定の場合は、「ロガーの設定」ノードを選択します。
「ログ設定」ページで、次のフィールドを使用してログをカスタマイズします。
ログファイル — サーバーログファイル用に別の名前や場所を指定するには、テキストフィールドに新しいパス名を入力します。デフォルトの場所は、domain-dir/logs/server.log です。
アラーム — JMX フレームワークを通じて、SEVERE および WARNING メッセージをルーティングするには、「有効」チェックボックスにチェックマークを付けます。
システムログへの書き込み — Solaris システムおよび Linux システムに限り、サーバーログのほかに syslog 機能にログ出力を送る場合は、「有効」チェックボックスにチェックマークを付けます。
ログハンドラ — server.log あるいは syslog 以外の送信先にログを送る場合は、カスタムログハンドラを組み込むことができます。組み込まれるカスタムハンドラには、クラス java.util.logging.Handler (JSR 047 準拠の API) を拡張する必要があります。「ログハンドラ」フィールドに、ハンドラの絶対クラス名を入力します。Application Server のクラスパスにもそのハンドラクラスを置き、サーバーの起動時にハンドラがインストールされるようにします。カスタムハンドラからのログレコードは、「ログレコード」に説明する形式になります。
ログフィルタ — server.log、syslog、またはカスタムログハンドラで指定した送信先などに送信するログレコードをフィルタリングする場合は、カスタムログフィルタを組み込むことができます。組み込まれるカスタムフィルタは、インタフェース java.util.logging.Filter を実装している必要があります。「ログフィルタ」フィールドに、フィルタの絶対クラス名を入力します。Application Server のクラスパスにもそのフィルタクラスを置き、サーバーの起動時にフィルタがインストールされるようにします。
ファイルローテーションの制限 — サーバーログがバイト単位で指定されたサイズに達すると、新しい空のファイル server.log を作成し、古いファイルの名前を server.log_date に変更します。ここで、date は、ファイルのローテーションが発生した日付と時刻です。デフォルト値は 2M バイトです。上限の最小値は 500K バイトです。それより小さな値を指定すると、ファイルは 500K バイトに達した時点でローテーションされます。ログファイルのローテーションをオフにするには、この値を 0 に設定します。
ファイルローテーションの時間制限 — 指定された分数に達すると、サーバーログはローテーションされます。デフォルト値は 0 です。これは「ファイルローテーションの制限」フィールドで指定されたサイズに達すると、ファイルがローテーションされることを意味しています。1 分以上の値を指定すると、時間制限がサイズ制限に優先されます。
「保存」をクリックして変更を保存します。「ログファイルを表示」をクリックして、サーバーログを表示します。
ツリーコンポーネントで、「ノードエージェント」ノードまたは「設定」ノードを開きます。
特定のノードエージェントを選択するか、設定するインスタンスを選択します。
ノードエージェントの場合は、「ログレベル」タブを選択します。設定の場合は、「ロガーの設定」ノードを選択したあと、「ログレベル」タブを選択します。
「モジュールログレベル」ページで、対象モジュールまたはログレベルを変更するモジュールの横にあるドロップダウンリストから新しい値を選択します。
デフォルトのレベルは INFO で、それ以上のレベル (WARNING、SEVERE) のメッセージがログに表示されることを意味します。次の値のどれかを選択します (最高から最低まで表示)。
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
OFF
アプリケーションロガーのログレベルを設定するには、「追加プロパティー」セクションを使用します。
プロパティー名はロガー名前空間で、値は可能な 8 レベルのいずれか 1 つを指定します。たとえば、プロパティー名を samples.logging.simple.servlet に、その値を FINE に指定できます。
次のような CORBA モジュールのトランスポートサブモジュールなど、サブモジュールのログレベルを変更するときにもこの領域を使います。
javax.enterprise.resource.corba.ORBId.transport |
「保存」をクリックして変更を保存するか、または「デフォルト」をクリックしてデフォルト値を復元します。
System.out.println への呼び出しは、ロガー名 javax.enterprise.system.stream.out を使って INFO レベルにログ記録されます。System.err.println への呼び出しは、ロガー名 javax.enterprise.system.stream.err を使って WARNING レベルにログ記録されます。これらのソースからのログをオフにするには、「追加プロパティー」セクションでロガー名の値を OFF に指定します。
ログレベル設定の変更はただちに有効になります。それらは domain.xml ファイルにも保存され、サーバーの再起動時に使用されます。
ツリーコンポーネントで、ログを表示するサーバーインスタンスのノードを開きます。
「一般情報」ページで、「ログファイルの表示」をクリックします。
「検索条件」領域を使用して、ログビューアのカスタマイズおよびフィルタリングを行います。この基本フィールドは次のように使用します。
インスタンス名 — ドロップダウンリストからインスタンス名を選択して、そのサーバーインスタンスのログを表示します。デフォルトは現在のサーバーインスタンスです。
ログファイル — ドロップダウンリストからログファイル名を選択して、そのログのコンテンツを表示します。デフォルトは server.log です。
タイムスタンプ — 最新のメッセージを表示するには、「最新」 (デフォルト) を選択します。特定期間内のメッセージだけを表示するには、「特定範囲」を選択して、表示される「開始」と「終了」フィールドに日付と時刻を入力します。時刻の値の構文は次の形式を必ず使用してください (SSS はミリ秒)。
hh:mm:ss.SSS |
次に例を示します。
17:10:00.000 |
「開始」フィールドの値が「終了」フィールドの値よりも遅い場合は、エラーメッセージが表示されます。
ログレベル — ログレベルでメッセージをフィルタリングするには、ドロップダウンリストからログレベルを選択します。デフォルトでは、サーバーログにある選択したログレベルおよびさらに重大なレベルのすべてのメッセージが表示に含まれます。選択したレベルのメッセージだけを表示するには、「より重度の高いメッセージをこれ以上含めない」というラベルの付いたチェックボックスを選択します。
表示したいメッセージを確実にサーバーログに表示するには、最初に「ログレベル」ページで適切なログレベルを設定してください。「ログレベルを設定する」を参照してください
ログレベルに基づくログメッセージのフィルタリングを選択する場合、指定したフィルタリング基準と一致するメッセージだけが表示されます。しかし、このフィルタリングは、どのメッセージがサーバーログに記録されるかには影響しません。
最新の 40 エントリが「ログ設定」と「ログレベル」ページで指定した設定で表示されます。
最新のメッセージが最後に表示されるようにメッセージを並べ替えるには、タイムスタンプヘッダーのとなりの▲印をクリックします。
形式設定済みのメッセージを表示するには、次の印が付いたリンクをクリックします。
(詳細) |
「ログエントリの詳細」というウィンドウが現れて、形式設定済みメッセージを表示します。
エントリのリストの末尾で、ボタンをクリックしてログファイルの古いエントリまたは新しいエントリを表示します。
「検索条件」領域で「詳細検索」をクリックして、ログビューアの詳細設定を行います。「詳細オプション」フィールドは次のように使用します。
ロガー — モジュール別にフィルタリングするには、ドロップダウンリストから 1 つ以上の名前空間を選択します。shift-click または control-click を使い、複数の名前空間を選択します。
高いレベルの名前空間を 1 つ選ぶと、その下のすべての名前空間が選択されます。たとえば、javax.enterprise.system を選択すると、その名前空間に下にあるすべてのモジュールのロガーも選択されます。javax.enterprise.system.core、javax.enterprise.system.tools.admin などです。
カスタムロガー — 特定のアプリケーションに固有のロガーのメッセージを表示するには、テキストフィールドで 1 行に 1 つずつロガー名を入力します。アプリケーションに複数のモジュールがある場合は、そのいずれかまたはすべてを表示できます。たとえば、使用しているアプリケーションに次の名前のロガーがあるとします。
com.mycompany.myapp.module1 com.mycompany.myapp.module2 com.mycompany.myapp.module3 |
アプリケーション内のすべてのモジュールのメッセージを表示するには、com.mycompany.myapp と入力します。module2 のメッセージだけを表示するには、com.mycompany.myapp.module2 と入力します。
1 つ以上のカスタムロガーを指定した場合、Application Server モジュールのメッセージは、「ロガー」領域で明示的に指定されるときだけ表示されます。
名前と値のペア — 特定のスレッドの出力を表示するには、テキストフィールドにスレッドのキー名と値を入力します。キー名は _ThreadID です。次に例を示します。
_ThreadID=13 |
com.mycompany.myapp.module2 がいくつかのスレッドで実行されるとします。1 つのスレッドの出力だけを表示するようにログビューアを修正するには、「カスタムロガー」フィールドでモジュールのロガーを指定してからこのフィールドにスレッド ID を指定します。
表示 — 一度に 40 メッセージ (デフォルト) 以上を表示するには、ドロップダウンリストからほかの可能な値 (100、250、または 1000) を選択します。
スタックトレースを表示するには、「過度に長いメッセージを制限」チェックボックスのチェックマークを外します。デフォルトでは、スタックトレースはビューアに表示されません。表示するには、メッセージの (詳細) リンクをクリックします。
「基本検索」をクリックして、「詳細オプション」領域を非表示にします。