Oracle® Fusion Middleware Oracle WebLogic Server アプリケーション ロギングのロギング サービス ユーザーズ ガイド 11g リリース 1 (10.3.1) B55513-01 |
|
戻る |
次へ |
以下の節では、ログ メッセージを WebLogic サーバ ログ ファイルに書き込むことによってアプリケーションの管理を効率化する方法について説明します。
インターナショナライゼーション (I18N) メッセージ カタログ フレームワークは、アプリケーションが WebLogic サーバ ログに独自のメッセージ セットを送るために使用する一連のユーティリティと 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 のインストール ディレクトリです。
次のコマンドを入力します。java weblogic.MsgEditor
新しいカタログを作成するには、[ファイル|新しいカタログ] を選択します。
メッセージ エディタの使い方については、「WebLogic Server メッセージ エディタの使い方」を参照してください。
メッセージ エディタにメッセージを追加した後は、[ファイル|カタログを保存] を選択します。
次に、[ファイル|終了] を選択します。
メッセージ ローカライザにアクセスするには、WebLogic Server ホストから次の手順を実行します。
WL_HOME
\server\bin\setWLSEnv.cmd
(UNIX の場合 setWLSEnv.sh
) を入力してクラスパスを設定します。WL_HOME
は WebLogic Server のインストール ディレクトリです。
次のコマンドを入力します。java weblogic.MsgLocalizer
メッセージ ローカライザの GUI を使用して、特定ロケールのカタログを作成します。
基本的なコマンドライン ヘルプにアクセスするには、「java weblogic.MsgEditor -help」と入力します。
メッセージ カタログを作成した後は、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
として保存します。
コード リスト 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
ユーティリティでは、以下のファイルが作成されます。
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
〔Enter〕
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
によって生成されたクラスとプロパティ ファイルは、WebLogc サーバ ログにメッセージを送信するためのインタフェースを提供します。これらのクラスの中では、各ログ メッセージはアプリケーションが呼び出す 1 つのメソッドによって表されます。
コンパイル済みメッセージ カタログのメッセージを使用するには、次の手順に従います。
アプリケーション内のクラス ファイルでは、「メッセージ カタログのコンパイル」でコンパイルされた Logger
クラスをインポートします。
パッケージ名を検証するには、テキスト エディタでメッセージ カタログの XML ファイルを開き、i18n_package
属性の値を確認します。たとえば、コード リスト 5-1 にある次のようなメッセージ カタログのセグメントで、パッケージ名が示されています。
<message_catalog
i18n_package="com.xyz.msgcat"
対応するクラスをインポートするには、次の行を追加します。
import com.xyz.msgcat.MyMessagesLogger;
メッセージ名と関連付けられているメソッドを呼び出します。
カタログ内の各メッセージには、メッセージを表示するために呼び出すメソッドを指定する method
属性があります。たとえば、コード リスト 5-1 にある次のようなメッセージ カタログのセグメントで、メソッドの名前が示されています。
<logmessage messageid="700000" datelastchanged="1039193709347" datehash="-1776477005" severity="info" method="startup()" >
コード リスト 5-3 は、この startup
メソッドを呼び出す単純なクラスです。
I18N メッセージ カタログ フレームワークの使用に加え、アプリケーションでは weblogic.logging.NonCatalogLogger
API を使用して WebLogic サーバ ログにメッセージを送信できます。カタログからメッセージを呼び出す代わりに NonCatalogLogger
を使用することで、メッセージ テキストをアプリケーション コードに直接配置します。アプリケーションをインターナショナライズする必要がある場合には、メッセージ ロギングの唯一の手段としてこの機能を使用することはお勧めしません。
また、NonCatalogLogger
は (WebLogic Server JVM 内で実行されているのではなく) 独自の JVM で実行されているクライアント コードによっても使用されます。詳細については、「クライアント アプリケーションからのメッセージの書き込み」を参照してください。
WebLogic Server JVM の内部で実行されるアプリケーションで NonCatalogLogger
を使用するには、以下を行うためのコードをアプリケーションに追加します。
weblogic.logging.NonCatalogLogger
インタフェースをインポートします。
以下のコンストラクタを使用して NonCatalogLogger
オブジェクトをインスタンス化します。
NonCatalogLogger(java.lang.String myApplication)
myApplication
は、アプリケーションから WebLogic サーバ ログに送信されるメッセージを識別するために、ユーザが指定する名前です。
いずれかの NonCatalogLogger
メソッドを呼び出します。
正常な処理を報告するには、以下のメソッドを使用します。
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 ... >
サーブレット仕様は、サーブレットおよび JSP が WebLogic サーバ ログにシンプル メッセージを書き込むために使用できる javax.servlet.ServletContext
内の以下の API を提供します。
log(
java.lang.String msg
)
log(
java.lang.String msg
,
java.lang.Throwable
t
)
これらの API の使用の詳細については、javax.servlet.ServletContext
の 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 ロギング サービスは Java EE リソース アダプタにも対応しており、ManagedConnectionFactory
スコープのロギングを行えます。weblogic-ra.xml
デプロイメント記述子を使用して、リソース アダプタ ログのログ ファイル名、場所、ローテーション ポリシーなどをコンフィグレーションします。『Oracle Fusion Middleware Oracle WebLogic Server リソースアダプタ プログラマーズ ガイド』の「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 "//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
の有効な値は次のとおりです。
Debug
、Info
、Warning
、Error
、Notice
、Critical
、Alert
、Emergency
、および 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");
}
この種のラッパーは、メッセージ カタログ フレームワークを使用する DEBUG
メッセージと NonCatalogLogger
API を使用する DEBUG メッセージの両方に対して使用できます。
アプリケーションでこのメッセージを出力できるようにするには、アプリケーションの JVM を起動するときに次の Java オプションを使用します。
-Dmy.debug.enabled=true