アプリケーション ロギングの WebLogic ロギング サービス ユーザーズ ガイド

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

WebLogic Server ログへのメッセージの書き込み

以下の節では、ログ メッセージを WebLogic サーバ ログ ファイルに書き込むことによってアプリケーションの管理を効率化する方法について説明します。

 


I18N メッセージ カタログ フレームワークの使い方 : 主な手順

インターナショナライゼーション (I18N) メッセージ カタログ フレームワークは、アプリケーションが WebLogic サーバ ログに独自のメッセージ セットを送るために使用する一連のユーティリティと API を提供します。

I18N メッセージ カタログ フレームワークを使用してログ メッセージを書き込むには、以下のタスクを行います。

手順 1 : メッセージ カタログの作成

メッセージ カタログは、一連のテキスト メッセージを含んだ XML ファイルです。通常、アプリケーションはデフォルト言語のメッセージ セットを含むメッセージ カタログ 1 つを使用し、他の言語のメッセージを含む追加カタログを任意で使用します。

適切にフォーマットされたメッセージ カタログを作成および編集するには、WebLogic Server と一緒にインストールされるグラフィカル ユーザ インタフェース (GUI)、WebLogic メッセージ エディタ ユーティリティを使用します。ローカルの言語で対応するメッセージを作成するには、これも WebLogic Server でインストールされる GUI であるメッセージ ローカライザを使用します。

メッセージ エディタにアクセスするには、WebLogic Server ホストから次の手順を実行します。

  1. WL_HOME\server\bin\setWLSEnv.cmd (UNIX では setWLSEnv.sh) を入力してクラスパスを設定します。WL_HOME は WebLogic Server をインストールしたディレクトリです。
  2. 次のコマンドを入力します。java weblogic.MsgEditor
  3. 新しいカタログを作成するには、[ファイルArrow symbol新しいカタログ...] を選択します。
  4. メッセージ エディタの使い方については、「WebLogic Server メッセージ エディタの使い方」を参照してください。

  5. メッセージ エディタでメッセージを追加した後は、[ファイルArrow symbolカタログを保存] を選択します。
  6. 次に、[ファイルArrow symbol終了] を選択します。

メッセージ ローカライザにアクセスするには、WebLogic Server ホストから次の手順を実行します。

  1. WL_HOME\server\bin\setWLSEnv.cmd (UNIX では setWLSEnv.sh) を入力してクラスパスを設定します。WL_HOME は WebLogic Server をインストールしたディレクトリです。
  2. 次のコマンドを入力します。java weblogic.MsgLocalizer
  3. メッセージ ローカライザの GUI を使用して、特定ロケールのカタログを作成します。
  4. 基本的なコマンドライン ヘルプにアクセスするには、「java weblogic.MsgEditor -help」と入力します。

手順 2 : メッセージ カタログのコンパイル

メッセージ カタログを作成した後は、i18ngen および l10ngen コマンドライン ユーティリティを使用してプロパティ ファイルを生成し、Java クラス ファイルを生成およびコンパイルします。これらのユーティリティはメッセージ カタログの XML ファイルを入力とし、コンパイルされた Java クラスを作成します。Java クラスには、XML ファイルのメッセージに対応するメソッドが含まれます。

詳細については、「WebLogic Server インターナショナライゼーション ユーティリティの使い方」を参照してください。

メッセージ カタログをコンパイルするには、次の手順に従います。

  1. コマンド プロンプトから、WL_HOME\server\bin\setWLSEnv.cmd (UNIX では setWLSEnv.sh) を使用してクラスパスを設定します。WL_HOME は WebLogic Server をインストールしたディレクトリです。
  2. 次のコマンドを入力します。
  3. java weblogic.i18ngen -build -d targetdirectory source-files

    各要素の説明は次のとおりです。

    • targetdirectory は、i18ngen ユーティリティが生成およびコンパイルしたファイルを配置するルート ディレクトリ。Java ファイルは、メッセージ カタログの i18n_package 値および l10n_package 値に基づいてサブディレクトリに配置されます。
    • カタログのプロパティ ファイル i18n_user.properties は、targetdirectory に配置されます。デフォルトの対象ディレクトリは現在のディレクトリです。

    • source-files は、コンパイルするメッセージ カタログ ファイル。1 つまたは複数のディレクトリ名を指定すると、i18ngen が指定されたディレクトリ内のすべての XML ファイルを処理します。ファイル名を指定する場合は、すべてのファイルの名前に XML のサフィックスが付いている必要があります。すべての XML ファイルは、msgcat.dtd の構文に準拠していなければなりません。
    • i18ngen で Java ファイルが生成される場合は、Logger が各メッセージ カタログ ファイルの名前に付けられます。

  4. 手順 1 : メッセージ カタログの作成」で特定ロケールのカタログを作成した場合は、次の手順に従ってプロパティ ファイルを生成します。
    1. 現在のコマンド プロンプトで、手順 2 で指定した targetdirectory を CLASSPATH 環境変数に追加します。特定ロケールのプロパティ ファイルを生成するには、i18ngen ユーティリティで生成されたすべてのクラスがクラスパスになければなりません。
    2. 次のコマンドを入力します。
      java weblogic.l10ngen -d targetdirectory source-files
    3. 各要素の説明は次のとおりです。

    • targetdirectory は、l10ngen ユーティリティが生成したプロパティ ファイルを配置するルート ディレクトリ。通常は、手順 2 で指定した targetdirectory と同じです。プロパティ ファイルは、メッセージ カタログの l10n_package 値に基づいてサブディレクトリに配置されます。
    • source-files は、プロパティ ファイルを生成するメッセージ カタログ。メッセージ エディタで作成される最上位のカタログを指定する必要があります。メッセージ ローカライザで作成される特定ロケールのカタログは指定しません。通常は、手順 2 で指定した source-files またはソース ディレクトリと同じです。
  5. ほとんどの場合は、メッセージのクラス ファイルとプロパティ ファイルはアプリケーションと同じパッケージ階層に配置することをお勧めします。
  6. メッセージのクラスとプロパティをアプリケーションのパッケージ階層に含めない場合は、クラスが必ずアプリケーションのクラスパスに存在するようにする必要があります。

i18ngen コマンドの詳細については、「WebLogic Server インターナショナライゼーション ユーティリティの使い方」を参照してください。

例 : メッセージ カタログのコンパイル

この例では、メッセージ エディタで、タイプが loggable のメッセージが 1 つ含まれるメッセージ カタログが作成されています。メッセージ エディタは、そのメッセージ カタログを c:\MyMsgCat\MyMessages.xml として保存します。

コード リスト 5-1 は、メッセージカタログの内容を示しています。

コード リスト 5-1 サンプル メッセージ カタログ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE message_catalog PUBLIC "weblogic-message-catalog-dtd"
"http://www.bea.com/servers/wls90/dtd/msgcat.dtd">
<message_catalog
   i18n_package="com.xyz.msgcat"
   l10n_package="com.xyz.msgcat.l10n"
   subsystem="MyClient"
   version="1.0"
   baseid="700000"
   endid="800000"
   loggables="true"
   prefix="XYZ-"
>
<!-- Welcome message to verify that the class has been invoked-->
   <logmessage
     messageid="700000"
     datelastchanged="1039193709347"
     datehash="-1776477005"
     severity="info"
     method="startup()"
>
     <messagebody>
         The class has been invoked.
      </messagebody>
      <messagedetail>
         Verifies that the class has been invoked
         and is generating log messages
      </messagedetail>
      <cause>
         Someone has invoked the class in a remote JVM.
      </cause>
      <action> </action>
   </logmessage>
</message_catalog>

さらに、メッセージ ローカライザで、MyMessages.xml のメッセージのスペイン語バージョンが作成されます。メッセージ ローカライザは、そのスペイン語のカタログを c:\MyMsgCat\es\ES\MyMessages.xml として保存します。

コード リスト 5-2 スペイン語の特定ロケール カタログ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE locale_message_catalog PUBLIC
"weblogic-locale-message-catalog-dtd"
"http://www.bea.com/servers/wls90/dtd/l10n_msgcat.dtd">
<locale_message_catalog
version="1.0"
>
<!-- Mensaje agradable para verificar que se haya invocado la clase. -->
<logmessage
    messageid="700000"
   datelastchanged="1039546411623"
   >
      <messagebody>
         La clase se haya invocado.
      </messagebody>
      <messagedetail>
         Verifica que se haya invocado la clase y está
         generando mensajes del registro.
      </messagedetail>
      <cause>Alguien ha invocado la clase en un JVM alejado.</cause>
      <action> </action>
   </logmessage>
</locale_message_catalog>

メッセージ エディタで作成されたメッセージ カタログをコンパイルするには、次のコマンドを入力します。

java weblogic.i18ngen -build -d c:\MessageOutput c:\MyMsgCat\MyMessages.xml

i18ngen ユーティリティでは、以下のファイルが作成されます。

スペイン語カタログのプロパティ ファイルを作成するには、次の手順に従います。

  1. 次のように入力して、i18n のクラスをコマンド プロンプトのクラスパスに追加します。
    set CLASSPATH=%CLASSPATH%;c:\MessageOutput
  2. 次のように入力します。
    java weblogic.l10ngen -d c:\MessageOutput c:\MyMsgCat\MyMessages.xml

l10ngen ユーティリティで、以下のファイルが作成されます。

手順 3 : コンパイルされたメッセージ カタログからのメッセージの使用

i18ngen および l10ngen によって生成されたクラスとプロパティ ファイルは、WebLogc サーバ ログにメッセージを送信するためのインタフェースを提供します。これらのクラスの中では、各ログ メッセージはアプリケーションが呼び出す 1 つのメソッドによって表されます。

コンパイル済みメッセージ カタログのメッセージを使用するには、次の手順に従います。

  1. アプリケーションのクラス ファイルで、「手順 2 : メッセージ カタログのコンパイル」でコンパイルした Logger クラスをインポートします。
  2. パッケージ名を検証するには、テキスト エディタでメッセージ カタログの XML ファイルを開き、i18n_package 属性の値を確認します。たとえば、コード リスト 5-1 にある次のようなメッセージ カタログのセグメントで、パッケージ名が示されています。

    <message_catalog
        i18n_package="com.xyz.msgcat"

    対応するクラスをインポートするには、次の行を追加します。

    import com.xyz.msgcat.MyMessagesLogger;

  3. メッセージ名と関連付けられているメソッドを呼び出します。
  4. カタログ内の各メッセージには、メッセージを表示するために呼び出すメソッドを指定する method 属性があります。たとえば、コード リスト 5-1 にある次のようなメッセージ カタログのセグメントで、メソッドの名前が示されています。

    <logmessage
         messageid="700000"
         datelastchanged="1039193709347"
         datehash="-1776477005"
         severity="info"
         method="startup()"
    >

コード リスト 5-3 は、この startup メソッドを呼び出す単純なクラスです。

コード リスト 5-3 メッセージ カタログを使用するクラスの例
import com.xyz.msgcat.MyMessagesLogger;
public class MyClass { 
     public static void main (String[] args) {
     MyMessagesLogger.startup();
     }
}

JVM のシステム プロパティで現在の場所がスペインであることが指定されている場合、メッセージはスペイン語で出力されます。

 


NonCatalogLogger API の使用

I18N メッセージ カタログ フレームワークの使用に加え、アプリケーションでは weblogic.logging.NonCatalogLogger API を使用して WebLogic サーバ ログにメッセージを送信できます。カタログからメッセージを呼び出す代わりに NonCatalogLogger を使用することで、メッセージ テキストをアプリケーション コードに直接配置します。アプリケーションをインターナショナライズする必要がある場合には、メッセージ ロギングの唯一の手段としてこの機能を使用することはお勧めしません。

また、NonCatalogLogger は (WebLogic Server JVM 内で実行されているのではなく) 独自の JVM で実行されているクライアント コードによっても使用されます。詳細については、「クライアント アプリケーションからのメッセージの書き込み」を参照してください。

WebLogic Server JVM の内部で実行されるアプリケーションで NonCatalogLogger を使用するには、以下を行うためのコードをアプリケーションに追加します。

  1. weblogic.logging.NonCatalogLogger インタフェースをインポートします。
  2. 以下のコンストラクタを使用して NonCatalogLogger オブジェクトをインスタンス化します。
  3. NonCatalogLogger(java.lang.String myApplication)

    myApplication は、アプリケーションから WebLogic サーバ ログに送信されるメッセージを識別するために、ユーザが指定する名前です。

  4. いずれかの NonCatalogLogger メソッドを呼び出します。
  5. 正常な処理を報告するには、以下のメソッドを使用します。

    • info(java.lang.String msg)
    • info(java.lang.String msg, java.lang.Throwable t)
    • サーバまたはアプリケーションの正常な処理に影響しない要注意の処理、イベント、またはコンフィグレーションを報告するには、以下のメソッドを使用します。

    • warning(java.lang.String msg)
    • warning(java.lang.String msg, java.lang.Throwable t)
    • システムまたはアプリケーションが割り込みやサービスの停止をせずに対処できるエラーを報告するには、以下のメソッドを使用します。

    • error(java.lang.String msg)
    • error(java.lang.String msg, java.lang.Throwable t)
    • 処理の詳細またはアプリケーションの状態を示すには、以下のメソッドを使用します。それらのデバッグ メッセージは、JMX 通知としてブロードキャストされません。この重大度を使用する場合、アプリケーション用の「デバッグ モード」を作成することをお勧めします。次に、デバッグ モードで実行されるようコンフィグレーションされている場合にのみデバッグ メッセージを出力するようアプリケーションをコンフィグレーションします。デバッグ メッセージの使い方については、「デバッグ メッセージの書き込み」を参照してください。

    • debug(java.lang.String msg)
    • debug(java.lang.String msg, java.lang.Throwable t)

Throwable 引数を取るすべてのメソッドは、サーバ ログにスタック トレースを出力する可能性があります。NonCatalogLogger API については、weblogic.logging.NonCatalogLogger Javadoc を参照してください。

コード リスト 5-4 に、NonCatalogLogger API を使用してさまざまな重大度のメッセージを WebLogic サーバ ログに書き込むサーブレットを示します。

コード リスト 5-4 NonCatalogLogger メッセージの例
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.naming.Context;
import weblogic.jndi.Environment;
import weblogic.logging.NonCatalogLogger;
public class MyServlet extends HttpServlet {
     public void service (HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
       PrintWriter out = response.getWriter();
       NonCatalogLogger myLogger = null;
       try {
          out.println("Testing NonCatalogLogger. See
                         WLS Server log for output message.");
// NonCatalogLogger インスタンスを作成する。このインスタンスからの
// すべてのメッセージには <MyApplication> 文字列が含まれる
          myLogger = new NonCatalogLogger("MyApplication");
// アプリケーションが起動したことを示す INFO メッセージを出力する
          mylogger.info("Application started.");
// 例外メッセージの例を示すために、コードの次の行では
// 意図的に初期コンテキストを設定している。デフォルトの
// ポート番号 (7001) を使用するサーバでこのサーブレットを実行すると、
// サーブレットは例外を送出する
        Environment env = new Environment();
        env.setProviderUrl("t3://localhost:8000");
        Context ctx = env.getInitialContext();
     }
    catch (Exception e){
      out.println("Can't set initial context: " + e.getMessage());
// スタック トレースを含む WARNING メッセージを出力する
     mylogger.warning("Can't establish connections. ", e);
      }
   }
}

上記の例で示したサーブレットを 8000 以外のリスン ポートを指定するサーバ上で実行すると、以下のメッセージが WebLogic サーバ ログ ファイルに出力されます。メッセージは山括弧 (< >) で囲まれた一連の文字列またはフィールドで構成されています。

コード リスト 5-5 NonCatalogLogger の出力
####<May 27, 2004 8:45:42 AM EDT> <Error> <MySubsystem> <myhost> <adminServer> <ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <system> <> <> <1085661942864> <OBJ-0011> <Test NonCatalogLogger message
java.lang.Exception: Test NonCatalogLogger message
...
>

 


ServletContext の使用

サーブレット仕様は、サーブレットおよび JSP が WebLogic サーバ ログにシンプル メッセージを書き込むために使用できる javax.servlet.ServletContext 内の以下の API を提供します。

これらの API の使用の詳細については、javax.servlet.ServletContext の J2EE Javadoc (http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/ServletContext.html) を参照してください。

コード リスト 5-6 に、ServletContext を使用した JSP ロギングを示します。

コード リスト 5-6 JSP ロギング例
<%@ page language="java" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>INDEX</title>
</head>
<body bgcolor="#FFFFFF">
<%
config.getServletContext().log("Invoked ServletContext.log() From a JSP");
out.write("Request param arg0 = " + request.getParameter("arg0"));
%>
</body>
</html>

 


サーブレットとリソース アダプタのロギングのコンフィグレーション

このリリースの WebLogic Server では、WebLogic 固有のデプロイメント記述子を使用して、Web アプリケーションとリソース アダプタのロギングの動作をコンフィグレーションできます。ロギング コンフィグレーションのデプロイメント記述子要素では、ログ ファイルの名前、場所、ローテーション ポリシーなど、LogMBean インタフェースでサーバのロギングをコンフィグレーションする場合と同じような属性を定義します。

コンフィグレーション時に、アプリケーション イベントは Web アプリケーション固有のログ ファイルに送られます。デプロイメント記述子に、ロギング コンフィグレーション情報が含まれていない場合、デフォルトの動作は、これらのイベントをサーバ ログ ファイルに書き込むことです。

同様に、WebLogic ロギング サービスは J2EE リソース アダプタにも対応しており、ManagedConnectionFactory スコープのロギングを行えます。weblogic-ra.xml デプロイメント記述子を使用して、リソース アダプタ ログのログ ファイル名、場所、ローテーション ポリシーなどをコンフィグレーションします。『WebLogic リソース アダプタ プログラマーズ ガイド』の「weblogic-ra.xml スキーマ」を参照してください。

例 : ロギング コンフィグレーションのデプロイメント記述子

コード リスト 5-7 に、Web アプリケーションおよびリソース アダプタのロギングにおけるロギング動作のコンフィグレーションのためのデプロイメント記述子を断片的に示します。logging の要素は、LogMBean インタフェースの属性定義に対応します。この例に、すべての LogMBean 属性がリストされているわけではありません。ロギング コンフィグレーションは、Web アプリケーションの場合は WEB-INF/weblogic.xml ファイル内で、リソース アダプタの場合は META-INF/weblogic-ra.xml ファイル内で定義されています。

コード リスト 5-7 Web アプリケーションおよびコネクタのロギングのコンフィグレーション
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 9.0//EN" "http://www.bea.com/servers/wls90/dtd/weblogic90-web-jar.dtd">
<weblogic-web-app>
  <logging>
    <log-filename>d:\tmp\mywebapp.log</log-filename>
    <rotation-type>bySize</rotation-type>
    <number-of-files-limited>true</number-of-files-limited>
    <file-count>3</file-count>
    <file-size-limit>50</file-size-limit>
    <rotate-log-on-startup>true</rotate-log-on-startup>
    <log-file-rotation-dir>config/MedRecDomain/WebApp</log-file-rotation-dir>
  </logging>
</weblogic-web-app>
<weblogic-connector xmlns="http://www.bea.com/ns/weblogic/90">
  <jndi-name>eis/900BlackBoxNoTxConnector</jndi-name>
  <outbound-resource-adapter>
    <connection-definition-group>
      <connection-factory-interface>javax.sql.DataSource</connection-factory-interface>
      <connection-instance>
        <jndi-name>eis/900BlackBoxNoTxConnectorJNDINAME</jndi-name>
        <connection-properties>
          <pool-params>
            <initial-capacity>5</initial-capacity>
            <max-capacity>10</max-capacity>
            <capacity-increment>1</capacity-increment>
            <shrinking-enabled>true</shrinking-enabled>
            <shrink-frequency-seconds>60</shrink-frequency-seconds>
            <highest-num-waiters>1</highest-num-waiters>
            <highest-num-unavailable>3</highest-num-unavailable>
            <connection-reserve-timeout-seconds>11</connection-reserve-timeout-seconds>
          </pool-params>
          <logging>
            <log-filename>900BlackBoxNoTxOne.log</log-filename>
            <logging-enabled>true</logging-enabled>
            <rotation-type>bySize</rotation-type>
            <number-of-files-limited>true</number-of-files-limited>
            <file-count>3</file-count>
            <file-size-limit>100</file-size-limit>
            <rotate-log-on-startup>true</rotate-log-on-startup>
            <log-file-rotation-dir>c:/mylogs</log-file-rotation-dir>
            <rotation-time>3600</rotation-time>
            <file-time-span>7200</file-time-span>
          </logging>
          <properties>
            <property>
              <name>ConnectionURL</name>
              <value>jdbc:oracle:thin:@bcpdb:1531:bay920</value>
            </property>
            <property>
              <name>unique_ra_id</name>
              <value>blackbox-notx.oracle.810</value>
            </property>
          </properties>
        </connection-properties>
      </connection-instance>
    </connection-definition-group>
  </outbound-resource-adapter>
</weblogic-connector>

 


クライアント アプリケーションからのメッセージの書き込み

アプリケーションが WebLogic Server から離れた JVM で実行される場合、メッセージ カタログおよび NonCatalogLogger は使用できますが、メッセージは WebLogic サーバ ログには書き込まれません。代わりに、アプリケーションのメッセージはクライアント JVM の標準出力に書き込まれます。

WebLogic ロギング サービスで、クライアント JVM マシンが保持するログ ファイルにメッセージを送る場合は、クライアント JVM を起動するコマンドで次の引数を指定します。

-Dweblogic.log.FileName=logfilename

logfilename は、リモート ログ ファイルの名前です。

メッセージ カタログのサブセットと NonCatalogLogger メッセージをリモート JVM ログ ファイルと標準出力に送る場合は、さらに次の起動引数を指定します。

-Dweblogic.log.StdoutSeverityLevel=String

ここで、StdoutSeverityLevel の有効な値は次のとおりです。

DebugInfoWarningErrorNoticeCriticalAlertEmergency、および Off

サポートされている重大度については、weblogic.logging.Severities クラスを参照してください。

 


デバッグ メッセージの書き込み

アプリケーションの開発中、そのアプリケーションの低レベル アクティビティを示すメッセージを作成および使用できると便利です。DEBUG 重大度を使用すると、これらの低レベル メッセージを分類できます。アプリケーションが生成するすべての DEBUG メッセージが、コンフィグレーションされた最低限のしきい値の重大度に応じて、すべての WebLogic サーバ ロギング送り先に送信されます。

DEBUG 重大度を使用する場合、アプリケーション用の「デバッグ モード」を作成することをお勧めします。たとえば、アプリケーションがブール値を格納するオブジェクトを作成できるとします。デバッグ モードを有効または無効にするには、ブール値を切り替えます。次に、DEBUG メッセージごとに、アプリケーションのデバッグ モードが有効化されている場合にのみメッセージを出力するラッパーを作成します。

たとえば、次のコードでデバッグ メッセージを生成できます。

private static boolean debug = Boolean.getBoolean("my.debug.enabled");
if (debug) {
   mylogger.debug("Something debuggy happened");
}

この種のラッパーは、メッセージ カタログ フレームワークまたは NonCatalogLogger API を使用する DEBUG メッセージの両方に対して使用できます。

アプリケーションでこのメッセージを出力できるようにするには、アプリケーションの JVM を起動するときに次の Java オプションを使用します。

-Dmy.debug.enabled=true


  ページの先頭       前  次