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;
}
}
}
![]() ![]() |
![]() |
![]() |