ナビゲーションをスキップ

WebLogic Server ロギング サービスの使い方

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

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 を参照):

レベルとフィルタの設定

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 オブジェクトは WARNINGERRORNOTICECRITICALALERT、または EMERGENCY のメッセージのみをパブリッシュします。

Logger オブジェクトがパブリッシュするメッセージをより細かく管理できるようにするために、フィルタを作成して設定することもできます。フィルタとは、WLLogRecord オブジェクトのデータを基準のセットと比較するクラスのことです。Logger オブジェクトは、フィルタの基準を満たす WLLogRecord オブジェクトだけをパブリッシュします。たとえば、フィルタでは JDBC サブシステムからのメッセージのみパブリッシュするように Logger をコンフィグレーションできます。フィルタを作成するには、java.util.logging.Filter オブジェクトをインスタンス化し、Logger.setFilter API を使用してそれを Logger オブジェクトに設定します。

Logger オブジェクトがパブリッシュするメッセージのレベルとフィルタを設定する代わりに (またはそれに加えて)、個々のメッセージ ハンドラでレベルとフィルタを設定することもできます。

たとえば、LoggerWARNING レベル以上のメッセージをパブリッシュするように指定できます。さらに、各ハンドラで以下のことができます。

ドメイン ログ フィルタ

LogBroadcasterRuntimeMBean がパブリッシュするメッセージをフィルタ処理するために、Administration Console ではドメイン ログ フィルタを作成できます。Logger オブジェクトおよび Handler オブジェクトのフィルタと違って、ドメイン ログ フィルタは JMX で実装され、ドメイン Logger にメッセージをパブリッシュするためにサーバで使用される LogBroadcasterRuntimeMBean のみに登録されます。(図 4-1で、このフィルタは ドメイン ログ JMX フィルタ として表現されています)。

サーバ インスタンスのローカル ログ ファイルを管理する Logger オブジェクトで設定した JDK 1.4 のレベルまたはフィルタは、ドメイン ログ フィルタを無効にします。たとえば、サーバの Logger オブジェクトのレベルが WARNING に設定されている場合、ドメイン ログ フィルタは WARNING レベル以上のメッセージのみ受信します。

 


Logger と Handler のレベルの設定

Administration Console および weblogic.Admin ユーティリティでは、JDK 1.4 のレベルおよびフィルタを設定することはできません。LoggerConsoleHandler、および FileStreamHandler API を使用する必要があります。

Logger のレベルの設定

Logger オブジェクトのレベルを設定するには、次のように動作するクラスを作成します。

  1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
  2. LoggerHelper メソッドは、Logger オブジェクトを返します。詳細については、Logger に関する Sun API のドキュメント (http://java.sun.com/j2se/1.4/docs/api/java/util/logging/Logger.html) を参照してください。

  3. Logger.setLevel(WLevel level) メソッドを呼び出します。
  4. WebLogic Server Logger オブジェクトのレベルを設定するには、weblogic.logging.WLLevel クラスで定義されている値を渡す必要があります。有効な値のリストについては、WLLevel の「Javadoc」を参照してください。

    次に例を示します。

    setLevel(WLLevel.ALERT)

Handler のレベルの設定

Handler オブジェクトのレベルを設定するには、次のように動作するクラスを作成します( コード リスト 4-1 を参照):

  1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
  2. LoggerHelper メソッドは、Logger オブジェクトを返します。詳細については、Logger に関する Sun API のドキュメント (http://java.sun.com/j2se/1.4/docs/api/java/util/logging/Logger.html) を参照してください。

  3. Logger.getHandlers() メソッドを呼び出します。
  4. このメソッドは、Logger オブジェクトに登録されているすべてのハンドラの配列を返します。

  5. レベルを設定する必要のある Handler オブジェクトが見つかるまでハンドラの配列を検索します。
  6. Handler.getClass().getName() を使用すると、現在の配列インデックスが示しているハンドラのタイプがわかります。

  7. Handler.setLevel(WLevel level) メソッドを呼び出します。
  8. WebLogic Server Handler オブジェクトのレベルを設定するには、weblogic.logging.WLLevel クラスで定義されている値を渡す必要があります。有効な値のリストについては、WLLevel の「Javadoc」を参照してください。

    次に例を示します。

    setLevel(WLLevel.ALERT)

コード リスト 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 と Handler のフィルタの設定

Logger オブジェクトでフィルタを設定した場合、そのフィルタはオブジェクトがどのメッセージをパブリッシュするのかを指定します。したがって、フィルタは Logger オブジェクトに登録されているすべてのハンドラに影響します。ハンドラでフィルタを設定した場合、そのフィルタはその特定のハンドラの動作にのみ影響します。

フィルタを設定するには、次の手順に従います。

  1. java.util.logging.Filter を実装するクラスを作成します。コード リスト 4-2 を参照。
  2. そのクラスには、Filter.isLoggable メソッドと、受信メッセージを評価するロジックが必要です。ロジックが true と評価した場合、isLoggable メソッドは Logger オブジェクトがそのメッセージをパブリッシュできるようにします。

  3. Logger オブジェクトが動作している JVM のクラスパスにフィルタ オブジェクトを配置します。
  4. Logger オブジェクトのフィルタを設定するには、次のように動作するクラスを作成します。
    1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
    1. Logger.setFilter(Filter newFilter) メソッドを呼び出します。

    Handler オブジェクトのフィルタを設定するには、次のように動作するクラスを作成します。

    1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
    1. レベルを設定する必要のある Handler オブジェクトが見つかるまでハンドラの配列を検索します。
    2. Handler.getClass().getName() を使用すると、現在の配列インデックスが示しているハンドラのタイプがわかります。

    3. Handler.setFilter(Filter newFilter) メソッドを呼び出します。

コード リスト 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;
        }
    }
}

 

フッタのナビゲーションのスキップ  ページの先頭 前 次