WebLogic Server ロギング サービスの使い方
|
|
WebLogic Server ロギング サービスは、複数レベルのフィルタ処理を提供します。このため、どのメッセージが WebLogic Server ログ ファイルと標準出力、およびクライアント JVM が管理するログ ファイルと標準出力に書き込まれるのかを柔軟に指定できます。それらのフィルタ処理機能のほとんどは、java.util.logging パッケージの JDK 1.4 ロギング API の実装です。
以下の節では、WebLogic Server ロギング サービスで生成されるメッセージをフィルタ処理する方法について説明します。
注意 : WebLogic Server 8.1 より前のリリースでは、フィルタ処理は、ドメイン全体のログ ファイルと、WebLogic Server ロギング サービスに登録された Java Management Extensions (JMX) リスナでしか利用できませんでした。たとえば、フィルタを使用して、管理サーバがどのメッセージをドメイン全体のメッセージ ログに書き込むのかを指定することはできましたが、サーバ インスタンスがどのメッセージをそのローカル ログ ファイルに書き込むのかをフィルタを使用して指定することはできませんでした。サーバ インスタンスは常に、すべてのメッセージをそのローカル ログ ファイルに書き込んでいました。WebLogic Server 8.1 で JDK 1.4 ロギング API が導入されたことで、各サーバ インスタンスがそのローカル ログ ファイルまたはその標準出力に書き込むメッセージ、あるいはドメイン全体のメッセージ ログにブロードキャストするメッセージについてそれぞれのフィルタを作成できるようになりました。
WebLogic Server メッセージ カタログおよび NonCatalogLogger でメッセージが生成されるとき、それらのメッセージは java.util.logging.Logger オブジェクトに配信されます。Logger オブジェクトは、Logger をサブスクライブしているメッセージ ハンドラにメッセージをパブリッシュします。
WebLogic Server は、以下の 3 つの異なるコンテキストで Logger および Handler オブジェクトをインスタンス化します。(図 4-1 を参照):
Logger オブジェクトは、クライアント JVM で動作するクライアント アプリケーションから送信されるメッセージをパブリッシュします。ConsoleHandler。クライアント JVM からのメッセージをクライアントの標準出力に出力します。クライアント JVM で -Dweblogic.StdoutSeverityLevel Java 起動オプションを使用すると、WebLogic ロギング サービスは、ハンドラが標準出力に書き込むメッセージを制限するフィルタをこのハンドラ用に作成します。詳細については、「リモート アプリケーションからのメッセージの書き込み」を参照してください。
FileStreamHandler。クライアント JVM からのメッセージをクライアントのログ ファイルに書き込みます。クライアント JVM のログ ファイルのコンフィグレーションについては、「リモート JVM からファイルへのメッセージの書き込み」を参照してください。Logger オブジェクトは、サーバ インスタンスで動作するサブシステムおよびアプリケーションから送信されるメッセージをパブリッシュします。ConsoleHandler。メッセージをサーバの標準出力に出力できるようにします。FileStreamHandler。サーバのローカル ログ ファイルにメッセージを書き込みます。LogBroadcasterRuntimeMBean。管理サーバ上のドメイン Logger オブジェクトにパブリッシュします。 Logger オブジェクトに加えてドメイン Logger オブジェクトも管理します。ドメイン Logger オブジェクトは、各サーバの LogBroadcasterRuntimeMBean ハンドラからメッセージを受信します。WebLogic Server メッセージ カタログおよび NonCatalogLogger でメッセージが生成されるときには、メッセージの重大度が weblogic.logging.WLLevel オブジェクトに変換されます。WLLevel オブジェクトは、以下の値 (影響の小さい方から大きい方の順で並んでいる) のいずれかを指定できます。
DEBUG、INFO、WARNING、ERROR、NOTICE、CRITICAL、ALERT、EMERGENCY
デフォルトの Logger オブジェクトは、全レベルのメッセージをパブリッシュします。Logger オブジェクトでパブリッシュされる最低レベルのメッセージを設定するには、単純な Logger.setLevel API を使用します。メッセージを受信すると、Logger オブジェクトはそのメッセージのレベルと setLevel API で設定されたレベルを照合します。メッセージのレベルが Logger のレベルより下である場合は、直ちに復帰となります。メッセージのレベルが Logger のレベルより上である場合、Logger はそのメッセージを説明する WLLogRecord オブジェクトを割り当てます。
たとえば、Logger オブジェクトのレベルを WARNING に設定した場合、Logger オブジェクトは WARNING、ERROR、NOTICE、CRITICAL、ALERT、または EMERGENCY のメッセージのみをパブリッシュします。
Logger オブジェクトがパブリッシュするメッセージをより細かく管理できるようにするために、フィルタを作成して設定することもできます。フィルタとは、WLLogRecord オブジェクトのデータを基準のセットと比較するクラスのことです。Logger オブジェクトは、フィルタの基準を満たす WLLogRecord オブジェクトだけをパブリッシュします。たとえば、フィルタでは JDBC サブシステムからのメッセージのみパブリッシュするように Logger をコンフィグレーションできます。フィルタを作成するには、java.util.logging.Filter オブジェクトをインスタンス化し、Logger.setFilter API を使用してそれを Logger オブジェクトに設定します。
Logger オブジェクトがパブリッシュするメッセージのレベルとフィルタを設定する代わりに (またはそれに加えて)、個々のメッセージ ハンドラでレベルとフィルタを設定することもできます。
たとえば、Logger が WARNING レベル以上のメッセージをパブリッシュするように指定できます。さらに、各ハンドラで以下のことができます。
ConsoleHandler では、JDBC、JMS、および EJB サブシステムからの ALERT メッセージのみを選択するレベルとフィルタを設定する。JDBC、JMS、および EJB サブシステムからの ALERT メッセージのみが標準出力で表示されます。FileHandler では、レベルまたはフィルタ基準を追加設定しない。Logger オブジェクトは WARNING レベル以上のメッセージのみをパブリッシュするようにコンフィグレーションされているので、ログ ファイルにはすべてのサブシステムからの WARNING レベル以上のすべてのメッセージが格納されます。LogBroadcasterRuntimeMBean は、WARNING レベル以上のすべてのメッセージを、ドメイン全体のメッセージ ログを管理するために管理サーバで使用される Logger オブジェクトにパブリッシュする。LogBroadcasterRuntimeMBean がパブリッシュするメッセージをフィルタ処理するために、Administration Console ではドメイン ログ フィルタを作成できます。Logger オブジェクトおよび Handler オブジェクトのフィルタと違って、ドメイン ログ フィルタは JMX で実装され、ドメイン Logger にメッセージをパブリッシュするためにサーバで使用される LogBroadcasterRuntimeMBean のみに登録されます。(図 4-1で、このフィルタは ドメイン ログ JMX フィルタ として表現されています)。
サーバ インスタンスのローカル ログ ファイルを管理する Logger オブジェクトで設定した JDK 1.4 のレベルまたはフィルタは、ドメイン ログ フィルタを無効にします。たとえば、サーバの Logger オブジェクトのレベルが WARNING に設定されている場合、ドメイン ログ フィルタは WARNING レベル以上のメッセージのみ受信します。
Administration Console および weblogic.Admin ユーティリティでは、JDK 1.4 のレベルおよびフィルタを設定することはできません。Logger、ConsoleHandler、および FileStreamHandler API を使用する必要があります。
Logger オブジェクトのレベルを設定するには、次のように動作するクラスを作成します。
getClientLogger (現在のコンテキストがクライアント JVM である場合)getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトを取得する必要がある場合)getDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン ログを管理する Logger オブジェクトを取得する必要がある場合)LoggerHelper メソッドは、Logger オブジェクトを返します。詳細については、Logger に関する Sun API のドキュメント (http://java.sun.com/j2se/1.4/docs/api/java/util/logging/Logger.html) を参照してください。
WebLogic Server Logger オブジェクトのレベルを設定するには、weblogic.logging.WLLevel クラスで定義されている値を渡す必要があります。有効な値のリストについては、WLLevel の「Javadoc」を参照してください。
Handler オブジェクトのレベルを設定するには、次のように動作するクラスを作成します( コード リスト 4-1 を参照):
getClientLogger (現在のコンテキストがクライアント JVM である場合)getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトを取得する必要がある場合)getDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン ログを管理する Logger オブジェクトを取得する必要がある場合)LoggerHelper メソッドは、Logger オブジェクトを返します。詳細については、Logger に関する Sun API のドキュメント (http://java.sun.com/j2se/1.4/docs/api/java/util/logging/Logger.html) を参照してください。
WebLogic Server Handler オブジェクトのレベルを設定するには、weblogic.logging.WLLevel クラスで定義されている値を渡す必要があります。有効な値のリストについては、WLLevel の「Javadoc」を参照してください。
コード リスト 4-1例 : Handler オブジェクトのレベルの設定
import java.util.logging.Logger;
import java.util.logging.Handler;
import weblogic.logging.LoggingHelper;
import weblogic.logging.WLLevel;
public class LogLevel {
public static void main(String[] argv) throws Exception {
Logger serverlogger = LoggingHelper.getServerLogger();
Handler[] handlerArray = serverlogger.getHandlers();
for (int i=0; i < handlerArray.length; i++) {
Handler h = handlerArray[i];
if(h.getClass().getName().equals
("weblogic.logging.ConsoleHandler")){
h.setLevel(WLLevel.getLevel( WLLevel.ALERT) );
}
}
}
}
Logger オブジェクトでフィルタを設定した場合、そのフィルタはオブジェクトがどのメッセージをパブリッシュするのかを指定します。したがって、フィルタは Logger オブジェクトに登録されているすべてのハンドラに影響します。ハンドラでフィルタを設定した場合、そのフィルタはその特定のハンドラの動作にのみ影響します。
java.util.logging.Filter を実装するクラスを作成します。コード リスト 4-2 を参照。そのクラスには、Filter.isLoggable メソッドと、受信メッセージを評価するロジックが必要です。ロジックが true と評価した場合、isLoggable メソッドは Logger オブジェクトがそのメッセージをパブリッシュできるようにします。
getClientLogger (現在のコンテキストがクライアント JVM である場合)getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトをフィルタ処理する必要がある場合)getServerLogger (現在のコンテキストが管理サーバであり、かつドメイン サーバ ログを管理する Logger オブジェクトをフィルタ処理する必要がある場合)コード リスト 4-2 は、Deployer サブシステムからのすべてのメッセージを拒否するクラスの例です。
コード リスト 4-2JDK 1.4 Logger オブジェクトのフィルタ例
import java.util.logging.Logger;
import java.util.logging.Filter;
import java.util.logging.LogRecord;
import weblogic.logging.WLLogRecord;
import weblogic.logging.WLLevel;
public class MyFilter implements Filter {
public boolean isLoggable(LogRecord record) {
if (record instanceof WLLogRecord) {
WLLogRecord rec = (WLLogRecord)record;
if (rec.getLoggerName().equals("Deployer")) {
return false;
} else {
return true;
}
} else {
return false;
}
}
}
|
|
|