workshopLogCfg.xml コンフィグレーション ファイル

workshopLogCfg.xml ファイルは、WebLogic Server に対する WebLogic Workshop のロギング コンフィグレーションおよびロギング レベルを指定します。アプリケーションで、このロギング機能を使用できます。発生した問題を診断するために、BEA テクニカル サポートの担当者から WebLogic Workshop のロギング動作を変更するように指示されることもあります。このトピックでは、WebLogic Workshop のロギング メカニズムの基本的な機能を説明します。

log4j ライブラリ

WebLogic Workshop では、Apache Foundation の Jakarta プロジェクトが開発した Log4j Java ロギング機能を使用します。workshopLogCfg.xml に含まれる XML タグの名前は、Log4j API 仕様に定義されているクラス名およびフィールド名と直接対応しています。Log4j の詳細については、Log4j プロジェクトのサイトを参照してください。以下で、Log4j の概要を紹介します。

ロガー

Log4j は、Logger クラスを定義します。1 つのアプリケーションで、各々がユニークな名前を持つ複数のロガーを作成できます。Log4j の標準的な使い方では、アプリケーションで、ログ メッセージを出力する各アプリケーション クラスの Logger インスタンスが作成されます。ロガーの名前は通常、アプリケーション クラスの部分修飾名と同じです。たとえば、アプリケーション クラス com.mycompany.MyClass では「mycompany.MyClass」という名前のロガーが作成されると考えられます。ロガーはネームスペースの階層内に存在し、その階層における上位クラスから動作を継承します。

Logger クラスには、debuginfowarn および error という、ログ メッセージの出力のための 4 つのメソッドが定義されています。アプリケーション クラスは、レポートされる状況に適したメソッドを (ローカル ロガー上で) 呼び出します。

アペンダ

Log4j は、ロギング出力の送り先を表すアペンダを定義します。複数のアペンダを定義できます。たとえば、アプリケーションではログ メッセージをコンソールに送信するアペンダと、ログ メッセージをファイルに書き込む別のアペンダを定義できます。個々のロガーをコンフィグレーションして、0 または 1 つ以上のアペンダに書き込むようにコンフィグレーションすることもできます。一例としては、すべてのロギング メッセージ (全レベル) をログ ファイルに送信し、一方でコンソールにはエラー レベル メッセージのみを送信する使い方があります。

レイアウト

Log4j は、ログ メッセージのフォーマットを制御するレイアウトを定義します。各レイアウトは、現在の時刻と日付、ログ レベル、ロガー名、ログ メッセージなどのデータに置換できる特定のメッセージ フォーマットを指定します。特定のレイアウトは、各アペンダと関連付けられています。これにより、たとえばファイル出力とは違うログ メッセージ フォーマットをコンソール出力に対して指定できます。

コンフィグレーション

実行時の Log4j コンフィグレーションのすべてのコンポーネントを定義します。これは通常、Log4j ライブラリでフォーマットを定義された XML コンフィグレーション ファイルで実現します。コンフィグレーション ファイルは、実行時に log4j.configuration Java プロパティを使用して指定できます。

コンフィグレーション ファイルは、ロガー、アペンダ、およびレイアウトを宣言し、それらの組み合わせをコンフィグレーションして、アプリケーションにとって望ましいロギング スタイルを提供します。

WebLogic Workshop のロギング

デフォルトでは、WebLogic Workshop のロギング コンフィグレーションは <BEA_HOME>/<WEBLOGIC_HOME>/common/lib/workshopLogCfg.xml というファイルで定義されます。workshopLogCfg.xml ファイルには、WebLogic Workshop 環境でのさまざまな種類のメッセージのロギング方法を記述する XML タグが含まれています。これらのタグの名前は、log4j API 仕様に定義されているクラス名およびフィールド名と直接対応しています。

WebLogic Workshop でのメッセージのロギング方法をカスタマイズするには、workshopLogCfg.xml を修正するか、独自の Log4j コンフィグレーション ファイルを用意します。独自のファイルを用意する場合は、log4j.configuration Java プロパティでこのファイルの場所を設定する必要があります。たとえば、WebLogic Server の起動に使用したコマンド ラインで、-Dlog4j.configuration=<コンフィグレーション ファイルのパス> と入力します。

workshopLogCfg.xml ファイルの内容を理解しておくことをお勧めします。このファイルに定義される要素と属性を理解することで、workshopLogCfg.xml をカスタマイズしたり、自分のロギング要件に適した Log4j コンフィグレーション ファイルを別に記述することができます。

workshopLogCfg.xml の内容について

workshopLogCfg.xml ファイルには、2 つの主要なコンフィグレーション値のセットが含まれています。コンフィグレーション値の最初のセットでは、<appender> 要素を使用して、WebLogic Workshop 環境からメッセージを受信するログ ファイルを定義します。この要素は、Log4j API 仕様に定義されている Appender クラスと同じ名前を共有します。コンフィグレーション ファイルでこの部分に該当するエントリを以下に示します。

  <appender name="SYSLOGFILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="workshop_debug.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="500000KB" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1} [%t][%x]: %m%n"/>
</layout>
</appender>

このエントリにより、WebLogic Workshop で RollingFileAppender タイプの Log4j Appender オブジェクトが作成されます。RollingFileAppender は、ログ ファイルが一定のサイズに達したときにそれらのファイルをバックアップする特殊な Log4j Appender クラスです。Log4j 仕様には、さまざまなタイプの Appender クラスが定義されています。<appender> 要素の class 属性を使用することで、すべてのタイプを使用できます。たとえば、WebLogic Workshop からコンソールに特定の種類のメッセージを送信する場合は、<appender> 要素の class 属性に org.apache.log4j.ConsoleAppender を設定します。<appender> 要素の name 属性は、Appender オブジェクトに変数名を割り当てます。workshopLogCfg.xml では、この名前を後でコンフィグレーション ファイル内で使用して、特定のメッセージをその Appender に割リ当てます。

<param> 要素は、名前と値のペアを使用して、Appender オブジェクトのさまざまなフィールドに値を割り当てます。File 値は、メッセージ ソースがメッセージをロギングする物理ファイルの名前を定義します。WebLogic Workshop がログ メッセージを書き込むデフォルトのログ ファイルについては、メッセージ ロギングを参照してください。Append 値は、新しいログ メッセージがログ ファイルの最後に追加されることを示します。MaxFileSize 値は、このログ ファイルのファイル サイズの上限を指定します。

layout 要素の class 属性は、Log4j Layout クラスを定義します。Layout クラスは、ログ メッセージのフォーマットを定義します。ConversionPattern 値は、これらのフォーマットをさらに定義します。変換パターンの指定の詳細については、log4j API 仕様を参照してください。

コンフィグレーション値の 2 番目のセットでは、<category> 要素を使用してメッセージ ソースを定義します。さらに、これらのソースを workshopLogCfg.xml<append> 要素に定義されたログ ファイルに関連付けます。コンフィグレーション ファイルでこの部分に該当するエントリを次に示します。

<category name="weblogic.servlet.jsp">
<priority value="warn" />
<appender-ref ref="SYSLOGFILE" />
<appender-ref ref="SYSERRORLOGFILE" />
</category>

<appender-ref> 要素の ref 属性は、workshopLogCfg.xml の前半で定義した Appender オブジェクトの名前を参照します。priority 値は、WebLogic Workshop がこれらの Appender オブジェクトに送信するメッセージの中で優先度が最も低いタイプを定義します。この場合、weblogic.servlet.jsp によって、タイプが warn 以上のすべてのメッセージが報告されます。つまり、weblogic.servlet.jsp では、タイプが error のメッセージもロギングされます。これは、error のほうが warn よりも優先度が高いからです。Infowarn、および error は、すべて Log4j のメッセージ タイプです。詳細については、log4j 仕様を参照してください。

<category> 要素の name 属性は、メッセージ ソースを定義します。この場合、JSP から発生するすべての警告メッセージが SYSLOGFILE オブジェクトおよび SYSERRORLOGFILE Appender オブジェクトの両方に送信されます。

ファイル workshopLogCfg.xml では、JWS (WebLogic Workshop Web サービス) 呼び出しに関連する一連の要求と応答をデバッグする際に便利な 3 つのカテゴリが定義されます。カテゴリは、次のようにコンフィグレーション ファイルに定義されます。

  <category name="WLW.REQUEST">
      <priority value="info"/>
      <appender-ref ref="APPLOGFILE"/>
  </category>

  <category name="WLW.RESPONSE">
      <priority value="info"/>
      <appender-ref ref="APPLOGFILE"/>
  </category>

  <category name="WLW.INVOKE">
      <priority value="warn"/>
      <appender-ref ref="APPLOGFILE"/>
  </category>

3 つのカテゴリの priority のレベルを変更すると、Web サービス メソッドの呼び出しに関連するコール スタック全体のロギングを有効または無効にできます。

アプリケーション コードへの log4j ログ メッセージの追加

コードによって workshop.log ファイルにメッセージが出力されるようにするには、このファイル用のロガーを取得します。通常はクラスの修飾名 (たとえばサンプル Web サービス async/HelloWorldAsync.jws については「async.HelloWorldAsync」) をロガー名として JwsContext.getLogger メソッドを呼び出すことで、ロガーを取得できます。その後は、ロガーの debuginfowarn、または error メソッドを適宜呼び出すだけです。

デフォルトのロギング レベルは info です。つまり、デフォルトでは、Logger.debug() によって出力されるログ メッセージは記録されません。全レベルのログ メッセージを記録するには、次に示すように、workshopLogCfg.xml の「wlw」カテゴリのログ レベルを debug に設定します。

  <!-- wlw カテゴリは JwsContext および ControlContext から Logger API を使用して記録されたメッセージに使用する -->
  <category name="wlw">
    <priority value="debug" />
    <appender-ref ref="APPLOGFILE" />
  </category>

以下のサンプル コードは、JWS ファイル内でのロギングの使用を示しています。ソース ファイルは、簡略化のために部分的に省略されています。

package async; 
import com.bea.control.JwsContext; 
import com.bea.control.TimerControl; 
import com.bea.wlw.util.Logger;

public class HelloWorldAsync
{
    /** @common:context */
    JwsContext context;
    /**
     * @common:operation
     * @jws:conversation phase="start"
     */
    public void HelloAsync()
    {
        Logger logger = context.getLogger("async.HelloWorldAsync");
        logger.debug("about to start timer");
         // ここではタイマーを開始するのみ  
        helloDelay.start();
        logger.debug("timer started");
        return;
    }
    private void helloDelay_onTimeout(long time)
    {
        Logger logger = context.getLogger("async.HelloWorldAsync");
         // クライアントに Hello のメッセージを送信
        logger.debug("in timer handler: calling client");
        callback.onHelloResult("Hello, asynchronous world");
        
         // 以降、この会話のタイマー イベントは不要
        logger.debug("in timer handler: stopping timer");
        helloDelay.stop();
        
        return;
    }
}

上記のコードにより、HelloWorldAsync.jwsHelloAsync メソッド呼び出し時に、workshop.log に次のコンテンツが生成されます。直前のコードによって出力されなかったログ エントリは、次の出力から削除されています。

13 Jun 2003 14:49:23,796 DEBUG HelloWorldAsync: about to start timer
13 Jun 2003 14:49:24,171 DEBUG HelloWorldAsync: timer started
13 Jun 2003 14:49:33,921 DEBUG HelloWorldAsync: in timer handler: calling client
13 Jun 2003 14:49:33,937 DEBUG HelloWorldAsync: in timer handler: stopping timer

クラスタ化環境でのログ情報のトラッキング

クラスタ化環境にアプリケーションをデプロイする場合、クラスタ内の個々のサーバのログ情報を追跡できます。workshopLogCfg.xml のアペンダのコンフィグレーションを変更し、メッセージをログに記録したサーバの名前を返す変数を含めることができます。WebLogic Server が起動すると、そのサーバ名を持つ環境変数 weblogic.Name が設定されます。この変数は、ログ ファイルで確認できます。

予想されるログ メッセージ数がかなり少なく、1 つのログ ファイルに同時に書き込むサーバがクラスタ内にあまり多く存在しない場合、ログに記録されるメッセージごとにサーバ名が書き出されるように各アペンダを変更できます。この場合、<layout> タグの子である ConversionPattern という名前の <param> タグを、サーバ変数が含まれるように変更する必要があります。次に、変更後のアペンダの例を示します。

<appender name="APPLOGFILE" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="workshop.log" />
  <param name="Append" value="true" />
  <param name="MaxFileSize" value="3000KB" />
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="server:${weblogic.Name} %d{DATE} %-5p %-15c{1}: %m%n"/>
  </layout>
</appender> 

ConversionPattern パラメータの値には、変数 ${weblogic.Name} が含まれています。このパターンでは、メッセージがログに記録される場合、次の例のようなエントリがログ ファイルに書き込まれます。サーバの名前は cgServer として記述されます。

server:cgServer 05 Jun 2003 10:50:21,194 INFO RMClient: ConversationID=1054835390772; Protocol=java-call;
URI=/R MClientWeb/TestDriver.jws;Method=onTimeout; Phase=continue;Callback=null 

予想されるログ メッセージ数が非常に多い場合、サーバごとに異なるログ ファイルに書き込まれるように各アペンダを変更できます。この場合、次の例に示すように、サーバ名に File という名前の <param> タグを付加し、各サーバにユニークなログ ファイルを生成します。

<appender name="APPLOGFILE" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="${weblogic.Name}.workshop.log" />
  <param name="Append" value="true" />
  <param name="MaxFileSize" value="3000KB" />
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{DATE} %-5p %-15c{1}: %m%n"/>
  </layout>
</appender> 

関連トピック

メッセージ ロギング

コンフィグレーション ファイル リファレンス