4 WebLogic Serverログへのメッセージの書込み
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のインストール・ディレクトリです。 -
次のコマンドを入力します。
java weblogic.MsgEditor -
新しいカタログを作成するには、「ファイル」>「新しいカタログ」を選択します。
「WebLogic Serverメッセージ・エディタの使い方」を参照してください。
-
メッセージ・エディタにメッセージを追加した後は、「ファイル」>「カタログを保存」を選択します。
-
次に、「ファイル」>「終了」を選択します。
メッセージ・ローカライザにアクセスするには、WebLogic Serverホストから次の手順を実行します。
メッセージ・カタログのコンパイル
メッセージ・カタログを作成した後は、i18ngenおよびl10ngenコマンド行ユーティリティを使用してプロパティ・ファイルを生成し、Javaクラス・ファイルを生成およびコンパイルします。これらのユーティリティはメッセージ・カタログのXMLファイルを入力とし、コンパイルされたJavaクラスを作成します。Javaクラスには、XMLファイルのメッセージに対応するメソッドが含まれます。「WebLogic Server国際化ユーティリティの使い方」を参照してください。
メッセージ・カタログをコンパイルするには、次を行います:
-
コマンド・プロンプトから、
WL_HOME\server\bin\setWLSEnv.cmd(UNIXの場合setWLSEnv.sh)を使用してクラスパスを設定します。WL_HOMEは、WebLogic Serverをインストールしたディレクトリです。 -
次のコマンドを入力します。
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が各メッセージ・カタログ・ファイルの名前に付けられます。 -
-
「メッセージ・カタログの作成」で特定ロケールのカタログを作成した場合は、次の手順に従ってプロパティ・ファイルを生成します。
-
現在のコマンド・プロンプトで、上記ステップ2で指定した
targetdirectoryをCLASSPATH環境変数に追加します。特定ロケールのプロパティ・ファイルを生成するには、i18ngenユーティリティで生成されたすべてのクラスがクラスパスになければなりません。 -
次のコマンドを入力します。
java weblogic.l10ngen -d targetdirectory source-files
前のコマンドで、
-
targetdirectoryは、l10ngenユーティリティが生成したプロパティ・ファイルを配置するルート・ディレクトリを表します。通常は、ステップ2で指定したtargetdirectoryと同じです。プロパティ・ファイルは、メッセージ・カタログのl10n_package値に基づいてサブ・ディレクトリに配置されます。 -
source-filesは、プロパティ・ファイルを生成するメッセージ・カタログを表します。メッセージ・エディタで作成される最上位のカタログを指定する必要があります。メッセージ・ローカライザで作成される特定ロケールのカタログは指定しません。通常は、ステップ2で指定したものと同じsource-filesまたはソース・ディレクトリです。
-
-
-
ほとんどの場合は、メッセージのクラス・ファイルとプロパティ・ファイルはアプリケーションと同じパッケージ階層に配置することをお薦めします。
メッセージのクラスとプロパティをアプリケーションのパッケージ階層に含めない場合は、クラスが必ずアプリケーションのクラスパスに存在するようにする必要があります。
i18ngenコマンドの詳細は、WebLogic Server国際化ユーティリティの使い方を参照してください。
例: メッセージ・カタログのコンパイル
この例では、メッセージ・エディタで、タイプがloggableのメッセージが1つ含まれるメッセージ・カタログが作成されています。メッセージ・エディタは、そのメッセージ・カタログをc:\MyMsgCat\MyMessages.xmlとして保存します。
例4-1は、メッセージ・カタログの内容を示しています。
例4-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のメッセージのスペイン語バージョンが作成されます。例4-2に示すように、メッセージ・ローカライザは、そのスペイン語のカタログをc:\MyMsgCat\es\ES\MyMessages.xmlとして保存します。
例4-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ユーティリティでは、以下のファイルが作成されます。
-
c:\MessageOutput\i18n_user.properties -
c:\MessageOutput\com\xyz\msgcat\MyMessagesLogger.java -
c:\MessageOutput\com\xyz\msgcat\MyMessagesLogger.class -
c:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizer.properties -
c:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizerDetails.properties
プロパティ・ファイルの作成
スペイン語カタログのプロパティ・ファイルを作成するには、次を実行します。
-
次のように入力して、
i18nのクラスをコマンド・プロンプトのクラスパスに追加します。 -
set CLASSPATH=%CLASSPATH%;c:\MessageOutput -
次のコマンドを入力します。
java weblogic.l10ngen -d c:\MessageOutput c:\MyMsgCat\MyMessages.xml
l10ngenユーティリティで、以下のファイルが作成されます。
-
c:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizer_es_ES.properties -
c:\MessageOutput\com\xyz\msgcat\l10n\MyMessagesLogLocalizerDetails_es_ES.properties
コンパイルされたメッセージ・カタログからのメッセージの使用
i18ngenおよびl10ngenによって生成されたクラスとプロパティ・ファイルは、WebLogic Serverログにメッセージを送信するためのインタフェースを提供します。これらのクラスの中では、各ログ・メッセージはアプリケーションが呼び出す1つのメソッドによって表されます。
コンパイル済みメッセージ・カタログのメッセージを使用するには:
次の例は、このstartupメソッドを呼び出す単純なクラスを示しています。
import com.xyz.msgcat.MyMessagesLogger;
public class MyClass {
public static void main (String[] args) {
MyMessagesLogger.startup();
}
}
JVMのシステム・プロパティで現在の場所がスペインであることが指定されている場合、メッセージはスペイン語で出力されます。
NonCatalogLogger APIの使用
weblogic.logging.NonCatalogLogger APIを使用してWebLogic Serverログにメッセージを送信できます。カタログからメッセージを呼び出すかわりにNonCatalogLoggerを使用することで、メッセージ・テキストをアプリケーション・コードに直接配置します。アプリケーションを国際化する必要がある場合には、メッセージ・ロギングの唯一の手段としてこの機能を使用することはお薦めしません。
また、NonCatalogLoggerは(WebLogic Server JVM内で実行されているのではなく)独自のJVMで実行されているクライアント・コードによっても使用されます。詳細については、「クライアント・アプリケーションからのメッセージの書込み」を参照してください。
WebLogic Server JVMの内部で実行されるアプリケーションでNonCatalogLoggerを使用するには、以下を行うためのコードをアプリケーションに追加します。
Throwable引数を取るすべてのメソッドは、サーバー・ログにスタック・トレースを出力する可能性があります。NonCatalogLogger APIについては、「weblogic.logging.NonCatalogLogger」Javadocを参照してください。
次の例は、NonCatalogLogger APIを使用して様々な重大度のメッセージをWebLogic Serverログに書き込むサーブレットを示しています。
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.");
// Constructing a NonCatalogLogger instance. All messages from this
// instance will include a <MyApplication> string.
myLogger = new NonCatalogLogger("MyApplication");
// Outputting an INFO message to indicate that your application has started.
mylogger.info("Application started.");
// For the sake of providing an example exception message, the next
// lines of code purposefully set an initial context. If you run this
// servlet on a server that uses the default port number (7001), the
// servlet will throw an exception.
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());
// Prints a WARNING message that contains the stack trace.
mylogger.warning("Can't establish connections. ", e);
}
}
}
前述の例で示したサーブレットを8000以外のリスニング・ポートを指定するサーバー上で実行すると、次のメッセージがWebLogic Serverログ・ファイルに出力されます。メッセージは山カッコ(< >)で囲まれた一連の文字列またはフィールドで構成されています。
####<May 27, 2004 8:45:42 AM EDT> <Error> <MySubsystem> <myhost> <adminServer> <ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <system> <> <> <1085661942864> <BEA-000000> <Test NonCatalogLogger message java.lang.Exception: Test NonCatalogLogger message ... >
ServletContextの使用
log( java.lang.String msg )およびlog( java.lang.String msg , java.lang.Throwable t ) APIをjavax.servlet.ServletContextで提供します。これらのAPIの使用の詳細は、javax.servlet.ServletContextインタフェースのJavadoc (http://docs.oracle.com/cd/E17802_01/products/products/servlet/2.3/javadoc/javax/servlet/ServletContext.html)を参照してください。
次の例は、ServletContextを使用した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固有のデプロイメント記述子を使用して、Webアプリケーションとリソース・アダプタのロギングの動作を構成できます。ロギング構成のデプロイメント記述子要素では、ログ・ファイルの名前、場所、ローテーション・ポリシーなど、LogMBeanインタフェースでサーバーのロギングを構成する場合と同じような属性を定義します。
構成時に、アプリケーション・イベントはWebアプリケーション固有のログ・ファイルに送られます。デプロイメント記述子に、ロギング構成情報が含まれていない場合、デフォルトの動作は、これらのイベントをサーバー・ログ・ファイルに書き込むことです。
同様に、WebLogicロギング・サービスはJava EEリソース・アダプタにも対応しており、ManagedConnectionFactoryスコープのロギングを行えます。weblogic-ra.xmlデプロイメント記述子を使用して、リソース・アダプタ・ログのログ・ファイル名、場所およびローテーション・ポリシーを構成します。Oracle WebLogic Serverリソース・アダプタの開発のweblogic-ra.xmlスキーマを参照してください。
次の例は、Webアプリケーションおよびリソース・アダプタのロギング動作を構成するためのデプロイメント記述子のスニペットを示しています。loggingの要素は、LogMBeanインタフェースの属性定義に対応します。この例に、すべてのLogMBean属性がリストされているわけではありません。ロギング構成は、Webアプリケーションの場合はWEB-INF/weblogic.xmlファイル内で、リソース・アダプタの場合はMETA-INF/weblogic-ra.xmlファイル内で定義されています。
<!DOCTYPE weblogic-web-app PUBLIC "//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 Serverログには書き込まれません。かわりに、アプリケーションのメッセージはクライアントJVMの標準出力に書き込まれます。
WebLogicロギング・サービスで、クライアントJVMマシンが保持するログ・ファイルにメッセージを送る場合は、クライアントJVMを起動するコマンドで次の引数を指定します。
-Dweblogic.log.FileName=logfilename
前の引数のlogfilenameは、リモート・ログ・ファイルに使用する名前を表しています。
メッセージ・カタログのサブセットとNonCatalogLoggerメッセージをリモートJVMログ・ファイルと標準出力に送る場合は、さらに次の起動引数を指定します。
-Dweblogic.log.StdoutSeverityLevel=String
前の引数のStdoutSeverityLevelの有効な値は、Debug、Info、Warning、Error、Notice、Critical、Alert、EmergencyおよびOffです。
サポートされている重大度レベルの詳細は、Oracle WebLogic Server Java APIリファレンスのweblogic.logging.Severitiesを参照してください。
デバッグ・メッセージの書込み
アプリケーションの開発中、そのアプリケーションの低レベル・アクティビティを示すメッセージを作成して使用できます。DEBUG重大度を使用すると、これらの低レベル・メッセージを分類できます。
アプリケーションが生成するすべてのDEBUGメッセージが、構成された最低限のしきい値の重大度に応じて、すべてのWebLogic Serverロギング宛先に送信されます。
DEBUG重大度を使用する場合、アプリケーション用の「デバッグ・モード」を作成することをお薦めします。たとえば、アプリケーションがブール値を格納するオブジェクトを作成できるとします。デバッグ・モードを有効または無効にするには、ブール値を切り替えます。次に、DEBUGメッセージごとに、アプリケーションのデバッグ・モードが有効化されている場合にのみメッセージを出力するラッパーを作成します。
たとえば、次のコードでデバッグ・メッセージを生成できます。
private static boolean debug = Boolean.getBoolean("my.debug.enabled");if (debug) {mylogger.debug("Something debuggy happened");}
この種のラッパーは、メッセージ・カタログ・フレームワークを使用するDEBUGメッセージとNonCatalogLogger APIを使用するDEBUGメッセージの両方に対して使用できます。
アプリケーションでこのメッセージを出力できるようにするには、アプリケーションのJVMを起動するときに次のJavaオプションを使用します。
-Dmy.debug.enabled=true