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

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

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

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

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

また、この章には以下の節も含まれています。

 


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

インターナショナライゼーション (I18N) メッセージ カタログ フレームワークは、アプリケーションが WebLogic Server ログに独自のメッセージ セットを送るために使用する一連のユーティリティと 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. 新しいカタログを作成するには、[ファイル|新しいカタログ...] を選択します。
  4. メッセージ エディタの使い方については、以下を参照してください。

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

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

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

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

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

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

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

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

    i18ngen で Java ファイルが生成される場合は、Logger が各メッセージ カタログ ファイルの名前に付けられます。

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

  5. ほとんどの場合は、メッセージのクラス ファイルとプロパティ ファイルはアプリケーションと同じパッケージ階層に配置することをお勧めします。
  6. メッセージのクラスとプロパティをアプリケーションのパッケージ階層に含めない場合は、クラスが必ずアプリケーションのクラスパスに存在するようにする必要があります。

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

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

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

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

コード リスト 2-1サンプル メッセージ カタログ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE message_catalog PUBLIC "weblogic-message-catalog-dtd"
"http://www.bea.com/servers/wls810/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 として保存します。

コード リスト 2-2スペイン語の特定ロケール カタログ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE locale_message_catalog PUBLIC
"weblogic-locale-message-catalog-dtd"
"http://www.bea.com/servers/wls810/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 esta
         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 l10ngen -d c:\MessageOutput c:\MyMsgCat\MyMessages.xml

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

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

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

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

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

    <message_catalog
        i18n_package="com.xyz.msgcat"

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

    import com.xyz.msgcat.MyMessagesLogger;

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

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

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

コード リスト 2-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 Server ログにメッセージを送信できます。カタログからメッセージを呼び出す代わりに NonCatalogLogger を使用することで、メッセージ テキストをアプリケーション コードに直接配置します。アプリケーションをインターナショナライズする必要がある場合には、メッセージ ロギングの唯一の手段としてこの機能を使用することはお勧めしません。

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

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

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

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

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

    サーバ/アプリケーションの正常な処理に影響しない要注意の処理、イベント、またはコンフィグレーションを報告するには、以下のメソッドを使用します。

    システム/アプリケーションが割り込みやサービスの停止をせずに対処できるエラーを報告するには、以下のメソッドを使用します。

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

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

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

コード リスト 2-4NonCatalogLogger メッセージの例

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);", e);
    }
   }  
}

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

コード リスト 2-5NonCatalogLogger の出力

####<Jun 26, 2002 12:04:21 PM EDT> <Info> <MyApplication> <MyHost>
<examplesServer> <ExecuteThread: '10' for queue: 'default'> <kernel identity>
<> <000000> <Application started.>
####<Jun 26, 2002 12:04:23 PM EDT> <Warning> <MyApplication> <MyHost>
<examplesServer> <ExecuteThread: '10' for queue: 'default'> <kernel identity>
<> <000000> <Can't establish connections.>
javax.naming.CommunicationException.Root exception is
java.net.ConnectException: t3://localhost:8000: Destination unreachable; nested
exception is:
...

 


GenericServlet の使用

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

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

 


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

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

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

-Dweblogic.log.FileName=logfilename

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

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

-Dweblogic.StdoutEnabled=true 
-Dweblogic.StdoutDebugEnabled=boolean
-Dweblogic.StdoutSeverityLevel = [64 | 32 | 16 | 8 | 4 | 2 | 1 ]

booleantruefalse のいずれかで、StdoutSeverityLevel の数値は以下の重大度に対応します。

INFO(64)、WARNING(32)、ERROR(16)、NOTICE(8)、CRITICAL(4)、ALERT(2)、および EMERGENCY(1)

リモート JVM からファイルへのメッセージの書き込み

リモート JVM は、自身のステート情報を送信するための独自のメッセージ セットを生成できます。デフォルトでは、JVM はこれらのメッセージを標準出力に送ります。これらのメッセージは JVM のログ ファイルにリダイレクトできませんが、別のファイルに保存できます。詳細については、Administration Console オンライン ヘルプの「System.out と System.err のファイルへのリダイレクト」を参照してください。

 


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

アプリケーションの開発中、そのアプリケーションの低レベル アクティビティを示すメッセージを作成および使用できると便利です。DEBUG 重大度を使用すると、これらの低レベル メッセージを分類できます。アプリケーションが生成するすべての DEBUG メッセージは WebLogic Server ログ ファイルに送られます。重大度に基づいてログ メッセージを動的に除外できるサードパーティ ロギング サービスの Log4j とは異なり、WebLogic Server ログにはアプリケーションが生成するすべてのレベルのメッセージが含まれます。

WebLogic Server が DEBUG メッセージを標準出力に送るようコンフィグレーションできます。詳細については、Administration Console オンライン ヘルプの「サーバが標準出力に送信するメッセージの指定」を参照してください。

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

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

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

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

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

-Dmy.debug.enabled=true

 

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