Oracle Fusion Middleware Oracle WebLogic Serverアプリケーション・ロギングのためのロギング・サービスの使い方 11g リリース1(10.3.5) B61615-03 |
|
![]() 前 |
![]() 次 |
以下の節では、ログ・メッセージを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
新しいカタログを作成するには、「ファイル」>「新しいカタログ」を選択します。
メッセージ・エディタの使い方については、第6章「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ファイルのメッセージに対応するメソッドが含まれます。
詳細については、第7章「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
コマンドの詳細は、第7章「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
入力:
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."); // 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サーバー・ログ・ファイルに出力されます。メッセージは山カッコ(< >
)で囲まれた一連の文字列またはフィールドで構成されています。
例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://download.oracle.com/docs/cd/E17802_01/products/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 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