WebLogic Server ロギング サービスの使い方
以下の節では、ログ メッセージを WebLogic Server ログ ファイルに書き込むことによってアプリケーションの管理を効率化する方法について説明します。
インターナショナライゼーション (I18N) メッセージ カタログ フレームワークは、アプリケーションが WebLogic Server ログに独自のメッセージ セットを送るために使用する一連のユーティリティと API を提供します。このフレームワークは、ログ メッセージをローカライズする必要のあるアプリケーションにとって理想的ですが、ローカライズの不要なアプリケーションに対しても、状態の通信や出力のためのフレキシブルで優れた一連のツールを提供します。
I18N メッセージ カタログ フレームワークを使用してログ メッセージを書き込むには、以下のタスクを行います。
メッセージ カタログは、一連のテキスト メッセージを含んだ XML ファイルです。通常、アプリケーションはデフォルト言語のメッセージ セットを含むメッセージ カタログ 1 つを使用し、他の言語のメッセージを含む追加カタログを任意で使用します。
適切にフォーマットされたメッセージ カタログを作成および編集するには、WebLogic Server と一緒にインストールされるグラフィカル ユーザ インタフェース (GUI)、WebLogic メッセージ エディタ ユーティリティを使用します。ローカルの言語で対応するメッセージを作成するには、これも WebLogic Server でインストールされる GUI であるメッセージ ローカライザを使用します。
メッセージ エディタにアクセスするには、WebLogic Server ホストから次の手順を実行します。
WL_HOME
\server\bin\setWLSEnv.cmd
(UNIX では setWLSEnv.sh
) を入力してクラスパスを設定します。WL_HOME
は WebLogic Server をインストールしたディレクトリです。メッセージ ローカライザにアクセスするには、WebLogic Server ホストから次の手順を実行します。
メッセージ カタログを作成した後は、i18ngen
および l10ngen
コマンドライン ユーティリティを使用してプロパティ ファイルを生成し、Java クラス ファイルを生成およびコンパイルします。これらのユーティリティはメッセージ カタログの XML ファイルを入力とし、コンパイルされた Java クラスを作成します。Java クラスには、XML ファイルのメッセージに対応するメソッドが含まれます。
メッセージ カタログをコンパイルするには、次の手順に従います。
WL_HOME
\server\bin\setWLSEnv.cmd
(UNIX では setWLSEnv.sh
) を使用してクラスパスを設定します。WL_HOME
は WebLogic Server をインストールしたディレクトリです。targetdirectory
は、i18ngen
ユーティリティが生成およびコンパイルしたファイルを配置するルート ディレクトリです。Java ファイルは、メッセージ カタログの i18n_package
値および l10n_package
値に基づいてサブディレクトリに配置されます。source-files
は、コンパイルするメッセージ カタログ ファイルです。1 つまたは複数のディレクトリ名を指定すると、i18ngen
が指定されたディレクトリ内のすべての XML ファイルを処理します。ファイル名を指定する場合は、すべてのファイルの名前に XML のサフィックスが付いている必要があります。すべての XML ファイルは、msgcat.dtd
の構文に準拠していなければなりません。targetdirectory
を CLASSPATH 環境変数に追加します。特定ロケールのプロパティ ファイルを生成するには、i18ngen
ユーティリティで生成されたすべてのクラスがクラスパスになければなりません。 targetdirectory
は、l10ngen
ユーティリティが生成したプロパティ ファイルを配置するルート ディレクトリです。通常は、手順 2 で指定した targetdirectory
と同じです。プロパティ ファイルは、メッセージ カタログの l10n_package
値に基づいてサブディレクトリに配置されます。source-files
は、プロパティ ファイルを生成するメッセージ カタログです。メッセージ エディタで作成される最上位のカタログを指定する必要があります。メッセージ ローカライザで作成される特定ロケールのカタログは指定しません。通常は、手順 2 で指定した source-files
またはソース ディレクトリと同じです。i18ngen
コマンドの詳細については、『インターナショナライゼーション ガイド』の「BEA WebLogic Server のインターナショナライゼーション ユーティリティの使い方」を参照してください。
この例では、メッセージ エディタで、タイプが loggable
のメッセージが 1 つ含まれるメッセージ カタログが作成されています。メッセージ エディタは、そのメッセージ カタログを c:\MyMsgCat\MyMessages.xml
として保存します。
コード リスト 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
として保存します。
<?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
ユーティリティでは、以下のファイルが作成されます。
c:\MessageOutput\i18n_user.properties
c:\MessageOutput\com\xyz\
msgcat\MyMessagesLogger.java c:\MessageOutput\com\xyz\
msgcat\MyMessagesLogger.classc:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizer.properties
c:\MessageOutput\com\xyz\
msgcat\l10n\MyMessagesLogLocalizerDetails.properties
スペイン語カタログのプロパティ ファイルを作成するには、次の手順に従います。
l10ngen
ユーティリティで、以下のファイルが作成されます。
c:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizer_es_ES.properties
c:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizerDetails_es_ES.properties
i18ngen
および l10ngen
によって生成されたクラスとプロパティ ファイルは、WebLogc Server ログにメッセージを送信するためのインタフェースを提供します。これらのクラスの中では、各ログ メッセージはアプリケーションが呼び出す 1 つのメソッドによって表されます。
コンパイル済みメッセージ カタログのメッセージを使用するには、次の手順に従います。
Logger
クラスをインポートします。 パッケージ名を検証するには、テキスト エディタでメッセージ カタログの XML ファイルを開き、i18n_package
属性の値を確認します。たとえば、コード リスト 2-1 にある次のようなメッセージ カタログのセグメントで、パッケージ名が示されています。
<message_catalog
i18n_package="com.xyz.msgcat"
カタログ内の各メッセージには、メッセージを表示するために呼び出すメソッドを指定する 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 のシステム プロパティで現在の場所がスペインであることが指定されている場合、メッセージはスペイン語で出力されます。
I18N メッセージ カタログ フレームワークの使用に加え、アプリケーションでは weblogic.logging.NonCatalogLogger
API を使用して WebLogic Server ログにメッセージを送信できます。カタログからメッセージを呼び出す代わりに NonCatalogLogger
を使用することで、メッセージ テキストをアプリケーション コードに直接配置します。アプリケーションをインターナショナライズする必要がある場合には、メッセージ ロギングの唯一の手段としてこの機能を使用することはお勧めしません。
また、NonCatalogLogger
は (WebLogic Server JVM 内で実行されているのではなく) 独自の JVM で実行されているクライアント コードによっても使用されます。詳細については、「リモート アプリケーションからのメッセージの書き込み」を参照してください。
WebLogic Server JVM の内部で実行されるアプリケーションで NonCatalogLogger
を使用するには、以下を行うためのコードをアプリケーションに追加します。
NonCatalogLogger(java.lang.String
myApplication
)
myApplication
は、アプリケーションから WebLogic Server ログに送信されるメッセージを識別するために、ユーザが指定する名前です。
処理の詳細またはアプリケーションの状態を示すには、以下のメソッドを使用します。それらのデバッグ メッセージは、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:
...
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 ]
boolean
は true
か false
のいずれかで、StdoutSeverityLevel
の数値は以下の重大度に対応します。
INFO(64)、WARNING(32)、ERROR(16)、NOTICE(8)、CRITICAL(4)、ALERT(2)、および EMERGENCY(1)
リモート 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 オプションを使用します。