ログ ファイルのコンフィグレーションとログ メッセージのフィルタ処理

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic Server ログ メッセージのフィルタ処理

WebLogic ロギング サービスでは、複数のフィルタ処理オプションを利用できます。このため、どのメッセージが WebLogic Server ログ ファイルと標準出力に書き込まれ、どのメッセージがクライアント JVM が管理するログ ファイルと標準出力に書き込まれるのかを柔軟に指定できます。それらのフィルタ処理機能のほとんどは、java.util.logging パッケージの Java ロギング API の実装です。

以下の節では、WebLogic ロギング サービスで生成されるメッセージをフィルタ処理する方法について説明します。

関連情報については、以下を参照してください。

 


ロガーとハンドラの役割

WebLogic Server メッセージ カタログおよび NonCatalogLogger でメッセージが生成されるとき、それらのメッセージは java.util.logging.Logger オブジェクトに配信されます。Logger オブジェクトは、Logger をサブスクライブしているメッセージ ハンドラにメッセージをパブリッシュします。

WebLogic Server では、以下の 3 つの異なるコンテキストで Logger オブジェクトおよび Handler オブジェクトがインスタンス化されます (図 4-1 を参照)。

 


重大度などの条件によるメッセージのフィルタ処理

WebLogic Server メッセージ カタログおよび NonCatalogLogger でメッセージが生成されるときには、メッセージの重大度が weblogic.logging.WLLevel オブジェクトに変換されます。WLLevel オブジェクトは、以下の値 (影響の小さい方から大きい方の順で並んでいる) のいずれかを指定できます。

TRACEDEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY

Logger オブジェクトは、デフォルトでは全レベルのメッセージをパブリッシュします。Logger オブジェクトがパブリッシュする最低レベルのメッセージを設定するには、単純な Logger.setLevel API を使用します。メッセージを受信すると、Logger オブジェクトはそのメッセージのレベルと setLevel API で設定されたレベルを照合します。メッセージのレベルが Logger のレベルより下である場合は、すぐに復帰します。メッセージのレベルが Logger のレベルより上である場合、Logger はそのメッセージを説明する WLLogRecord オブジェクトを割り当てます。

たとえば、Logger オブジェクトのレベルを WARNING に設定した場合、Logger オブジェクトは WARNINGERRORCRITICALALERT、または EMERGENCY のメッセージのみをパブリッシュします。

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

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

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

 


ロガーとハンドラに対する重大度の設定

Administration Console と WLST を使用すると、標準 MBean コマンドで Handler オブジェクトに対する重大度を設定できます。Logger オブジェクトに対して重大度を設定するには、Logger API を使用できます。ロガーの重大度は、Administrator Console、WLST、またはコマンドラインからも設定することができます。「ロガーの重大度の指定」を参照してください。WLS クライアント (EJB クライアント、Web サービス クライアントなど) のロガーおよびハンドラの重大度をコンフィグレーションするには、Java ロギング API を使用する必要があります。

ロガーに対する重大度の設定

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

  1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
    • getClientLogger (現在のコンテキストがクライアント JVM である場合)。
    • getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトを取得する必要がある場合)。
    • getDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン ログを管理する Logger オブジェクトを取得する必要がある場合)。
    • LoggerHelper メソッドは、Logger オブジェクトを返します。Logger については、Sun API のドキュメント (http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/Logger.html) を参照してください。

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

    次に例を示します。

    setLevel(WLLevel.ALERT)

ハンドラに対する重大度の設定

API を使用して Handler オブジェクトの重大度を設定するには、次のように動作するクラスを作成します (コード リスト 4-1 を参照)。

  1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
    • getClientLogger (現在のコンテキストがクライアント JVM である場合)。
    • getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトを取得する必要がある場合)。
    • getDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン ログを管理する Logger オブジェクトを取得する必要がある場合)。
    • LoggerHelper メソッドは、Logger オブジェクトを返します。Logger については、Sun API のドキュメント (http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/Logger.html) を参照してください。

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

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

  6. Handler.setLevel(Level level) メソッドを呼び出します。
  7. WebLogic Server Handler オブジェクトの重大度を設定するには、weblogic.logging.WLLevel クラスで定義されている値を渡す必要があります。WebLogic Server は、java.util.logging.Level を対応する WLLevel にマップします。有効な値のリストについては、WLLevelJavadoc を参照してください。

    次に例を示します。

    setLevel(WLLevel.ALERT)

    コード リスト 4-1 例 : API を使用した 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.ALERT);
                }
            }
        }
    }

Administration Console またはコマンドラインを使用すると、LogMBean インタフェースで Handler オブジェクトの重大度をコンフィグレーションできます。

WLST の使い方の詳細については、『WebLogic Scripting Tool ガイド』の「WebLogic Scripting Tool の使用」を参照してください。setStdoutSeverity の詳細については、『WebLogic Server MBean リファレンス』の「LogMBean」を参照してください。

 


ロガーとハンドラのフィルタの設定

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

Administration Console と WLST を使用すると、標準 MBean コマンドで Handler オブジェクトに対するフィルタを設定できます。Logger オブジェクトにフィルタを設定するには、Logger API を使用する必要があります。クライアントサイド ロギングの場合、フィルタは Java ロギング API でのみ設定できます。

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

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

  3. Logger オブジェクトが動作している JVM のクラスパスにフィルタ オブジェクトを配置します。
  4. Logger オブジェクトのフィルタを設定するには、次のように動作するクラスを作成します。
    1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
    • getClientLogger (現在のコンテキストがクライアント JVM である場合)。
    • getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトをフィルタ処理する必要がある場合)。
    • getDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン サーバ ログを管理する Logger オブジェクトをフィルタ処理する必要がある場合)。
    1. Logger.setFilter(Filter newFilter) メソッドを呼び出します。
  5. API を使用して Handler オブジェクトのフィルタを設定するには、次のように動作するクラスを作成します。
    1. 以下の LoggingHelper メソッドの 1 つを呼び出します。
    • getClientLogger (現在のコンテキストがクライアント JVM である場合)。
    • getServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトをフィルタ処理する必要がある場合)。
    • getDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン サーバ ログを管理する Logger オブジェクトをフィルタ処理する必要がある場合)。
    1. レベルを設定する必要のある Handler オブジェクトが見つかるまでハンドラの配列を検索します。
    2. Handler.getClass().getName() を使用すると、現在の配列インデックスが示しているハンドラのタイプがわかります。

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

コード リスト 4-3 は、Deployer サブシステムからのすべてのメッセージを拒否するクラスのサンプルです。

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

Administration Console またはコマンドラインを使用すると、LogMBean インタフェースで Handler オブジェクトのフィルタをコンフィグレーションできます。

WLST の使い方の詳細については、『WebLogic Scripting Tool ガイド』の「WebLogic Scripting Tool の使用」を参照してください。setDomainLogBroadcastFilter の詳細については、『WebLogic Server MBean リファレンス』の「LogMBean」を参照してください。

ドメイン ログ メッセージのフィルタ処理

各管理対象サーバがドメイン ログにパブリッシュするメッセージをフィルタ処理する場合は、Administration Console (「ログ フィルタの作成」を参照) または WLST (コード リスト 4-4 を参照) を使用して、ドメイン ログのログ フィルタを作成できます。

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

1 つまたは複数のサーバがドメイン ログに送信するメッセージを変更するドメイン ログ フィルタを定義できます。デフォルトでは、重大度が NOTICE 以上のすべてのメッセージが送られます。

注意 : 重大度が DEBUG のメッセージは、フィルタを使用してもドメイン ログには送信されません。

Administration Console を使用した WebLogic Server インスタンスのドメイン ログ フィルタのコンフィグレーションについては、Administration Console オンライン ヘルプの「ログ メッセージのフィルタ処理」を参照してください。

 


Log4j アペンダに対する重大度とフィルタの設定

Administration Console と WLST を使用すると、標準 MBean コマンドで Appender オブジェクトに対する重大度を設定できます。Logger オブジェクトの重大度を設定するには、この節で説明するように Logger API を使用するか、「ロガーの重大度の指定」で説明するように Administration Console、WLST、またはコマンドラインを使用して設定することができます。

API を使用して Appender オブジェクトの重大度を設定するには、次のように動作するクラスを作成します。

  1. 以下の Log4jLoggingHelper メソッド (コード リスト 4-5 を参照) の 1 つを呼び出します。
    • getLog4jServerLogger (現在のコンテキストがサーバ JVM であり、かつローカル サーバ ログを管理するためにサーバで使用される Logger オブジェクトを取得する必要がある場合)。
    • getLog4jDomainLogger (現在のコンテキストが管理サーバであり、かつドメイン ログを管理する Logger オブジェクトを取得する必要がある場合)。
  2. logger.getAllAppenders() メソッドを呼び出します。
  3. Enumeration e = logger.getAllAppenders();

    このメソッドは、Logger オブジェクトに登録されているすべてのアペンダを返します。

  4. アペンダのリストを検索して、各アペンダ名を取得します。
  5. app.setThreshold(WLLog4jLevel level) メソッドを呼び出します。
  6. Log4j Appender オブジェクトのレベルを設定するには、weblogic.logging.log4j.WLLog4jLevel クラスで定義されている値を渡す必要があります。WebLogic Server は、org.apache.log4j.Level を対応する WLLevel にマップします。有効な値のリストについては、WLLevelJavadoc を参照してください。

フィルタを設定するには、org.apache.log4j.Filter を拡張するクラスを実装し、フィルタをアペンダに追加して、app.addFilter(Filter newFilter) メソッドを呼び出します。

コード リスト 4-5 は、以下のことを行うクラスのサンプルです。


ページの先頭       前  次