|
システム管理者と開発者は、ロギング出力をコンフィグレーションし、ログ メッセージをフィルタ処理してエラーをトラブルシューティングしたり、特定のイベントの通知を受信したりします。
以下に、ロギングのコンフィグレーション シナリオをいくつか示します。
DEBUG および INFO メッセージがログ ファイルに記録されないようにします。INFO レベルのメッセージを、標準出力ではなくログ ファイルにパブリッシュできるようにします。WARNING 以上のメッセージをハンドラがパブリッシュするように指定します。
このリリースには commons-logging インタフェースが用意されています。このインタフェースは commons.logging.LogFactory および Log インタフェースの実装を提供します。このインタフェースには、org.apache.commons.logging.LogFactory クラスの拡張が含まれています。このクラス拡張は、ロギング モジュールの LoggingService に委任される org.apache.commons.logging.Log の実装を作成するファクトリとして動作します。このデフォルト実装の名前は weblogic.logging.commons.LogFactoryImpl です。
http://jakarta.apache.org/commons/logging/apidocs/index.html を参照してください。
ここでは、システム プロパティを使用してログ ファクトリを設定する方法について説明します。
org.apache.commons.logging.LogFactory に対して設定されています。-Dorg.apache.commons.logging.LogFactory= weblogic.logging.commons.LogFactoryImpl
import org.apache.commons.logging.LogFactory;
System.setProperty(LogFactory.FACTORY_PROPERTY, "weblogic.logging.commons.LogFactoryImpl");
org.apache.commons.logging.impl.LogFactoryImpl の実装は commons logging jar にあります。例を示します。-Dorg.apache.commons.logging.LogFactory= org.apache.commons.logging.impl.LogFactoryImpl
System.setProperty(LogFactory.FACTORY_PROPERTY, "org.apache.commons.logging.impl.LogFactoryImpl");
各ログ メッセージには重大度が関連付けられています。重大度は、ログ メッセージの重要性と緊急度を大まかに示します。TRACE から EMERGENCY までの重大度があらかじめ定義されています。これらの重大度は、ログ要求がロガーにディスパッチされるとログ レベルに変換されます。ログ レベル オブジェクトは、以下の値 (影響の小さい方から大きい方の順で並んでいる) のいずれかを指定できます。
TRACE、DEBUG、INFO、NOTICE、WARNING、ERROR、CRITICAL、ALERT、EMERGENCY
ロガー、ハンドラ、およびユーザ アプリケーションに対してログの重大度を設定できます。ロガーに対して重大度を設定した場合、いずれのハンドラも、ロガーによって拒否されたイベントを受信しません。たとえば、ロガーに対してログ レベルを NOTICE に設定した場合、ハンドラは、INFO レベルのイベントを受信しません。ハンドラに対してログ レベルを設定した場合、制約はそのハンドラのみに適用され、他のハンドラには適用されません。たとえば、ファイル ハンドラに対して DEBUG をオフにすると、DEBUG メッセージはログ ファイルには書き込まれませんが、標準出力には書き込まれます。
ユーザ (Oracle CEP モジュールの所有者またはユーザ アプリケーションの所有者) は、個別モジュールに対して Apache commons logging で使用されるロギング カテゴリ タイプを表す名前を自由に定義できます。ただし、カテゴリ名がパッケージ名として定義されている場合は、命名規則に基づいて、ロギング レベル階層がデフォルトで想定されます。たとえば、2 つのモジュールのロギング カテゴリ名が com.oracle.foo と com.oracle.foo.bar である場合は、com.oracle.foo が com.oracle.foo.bar のルート ノードになります。このように、子ノードが親をオーバーライドしない限り、親ノード (com.oracle.foo) に適用されるロギング レベルが自動的に com.oracle.foo.bar に適用されます。
つまり、明示的に重大度がコンフィグレーションされた最も近い親から重大度が継承されない限り、ノードに対して指定されているロギングの重大度が有効です。ルート ノードは常に明示的にコンフィグレーションされるため、その他の設定がされていない場合は、すべてのノードがルートから重大度を継承します。
表 12-1 にログ メッセージの重大度を示します。
重大度の低いメッセージが数多く生成され、重大度の高いメッセージは少なくなります。たとえば、通常の環境では、INFO メッセージが多く生成され、EMERGENCY メッセージは生成されません。
システムはメッセージを標準出力および指定されたログ ファイルに書き込みます。メッセージはタイムスタンプ、重大度、サブシステム、およびメッセージ テキストとスタック トレース (ある場合) で構成されます。各属性は山括弧で囲みます。
<May 02, 2007 10:46:51 AM EST> <Notice> <CommonTestSubsystem> <BEA-123456>
<Another Commons test message>
システムがメッセージを標準出力に書き込むとき、出力にプレフィックス #### は含まれておらず、Server Name、Machine Name、Thread ID、User ID、Transaction ID、Diagnostic Context ID、および Raw Time Value の各フィールドは含まれていません。
前の節のメッセージが標準出力にどのように出力されるかを次の例に示します。
<Sept 22, 2004 10:51:10 AM EST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>
この例では、メッセージ属性は、Locale-formatted Timestamp、Severity、Subsystem、Message ID、および Message Text です。
Oracle CEP には、OSGi フレームワークよりも前に起動する低レベルのフレームワーク ロガーがあります。このロガーは OSGi フレームワーク内部のロギング イベントを報告するために使用され、ロギング サブシステムがコンフィグレーションされるまでロギング サブシステムのカスタム デフォルトとして機能します。
たとえば、ユーザに表示されるログ メッセージのレベルまたは重大度は、config.xml での設定より低く、コンソールの Launcher コマンドラインまたはログ ファイルでの設定と同じまたはそれより高い可能性があります。ロギング サブシステムが起動するまで、ログ メッセージはフレームワーク ロガーから送信され、フレームワークのロギング レベルを使用してメッセージがフィルタ処理されます。
Commons Logging を使用する方法は次のとおりです。
org.apache.commons.logging.LogFactory を weblogic.logging.commons.LogFactoryImpl に設定します。
この LogFactory は、org.apache.commons.logging.Log インタフェースを実装する weblogic.logging.commons.LogFactoryImpl のインスタンスを作成します。
LogFactory から、Commons Log オブジェクトへの参照を名前によって取得します。
この名前は、ログ ファイル内でサブシステム名として表示されます。
Log オブジェクトを使用して、ロギング サービスにログ要求を発行します。
Commons Log インタフェース メソッドは、オブジェクトを受け取ります。ほとんどの場合、これはメッセージ テキストを含む文字列です。
さらに、Commons LogObject は、コンストラクタでメッセージ ID、サブシステム名、および文字列メッセージ引数を受け取ります。org.apache.commons.logging (http://jakarta.apache.org/commons/logging/api/index.html) を参照してください。
weblogic.logging.commons.LogImpl ログ メソッドは、メッセージをサーバ ログに送ります。import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
public class MyCommonsTest {
public void testCommonsLogging() {
System.setProperty(LogFactory.FACTORY_PROPERTY,
"weblogic.logging.commons.LogFactoryImpl");
Log clog = LogFactory.getFactory().getInstance("MyCommonsLogger");
// Log String objects
clog.debug("Hey this is common debug");
clog.fatal("Hey this is common fatal", new Exception());
clog.error("Hey this is common error", new Exception());
clog.trace("Dont leave your footprints on the sands of time");
}
}
以下の節では、Oracle CEP ロギングのコンフィグレーションについて説明します。
この節では、<logging-service> コンフィグレーション オブジェクトについて説明します。
|
|
||
<entry> 要素で囲まれた名前と値のペアのリストです。個別モジュールとモジュールのロギングの重大度を表します。これらの重大度は Oracle CEP サーバのデフォルトの重大度をオーバーライドします。
|
この節では、log-stdout コンフィグレーション オブジェクトについて説明します。
|
|
||
この節では、log-file コンフィグレーション オブジェクトについて説明します。
Oracle CEP の個別モジュールについて、ロギングの重大度を指定できます。この重大度は、Oracle CEP のデフォルトのロギング重大度 (Notice) をオーバーライドします。個別モジュールの重大度を指定するには、モジュール パッケージの名前とロギングの重大度を (サーバの config.xml ファイル内のログ コンフィグレーションでの <logger-severity-properties> 要素として) 指定します。複数のパッケージまたはロガーを <logger-severity-properties> 要素に名前と値のペアとして指定できます。
次の config.xml サンプルは、Oracle CEP の複数のモジュールについてロギング重大度を変更する方法を示しています。
<logging-service>
<name>myLogService</name><logger-severity>Warning</logger-severity><stdout-config>myStdoutConfig</stdout-config>
<logger-severity-properties>
<entry>
<key>com.bea.wlevs.ede</key>
<value>Debug</value>
</entry>
<entry>
<key>sample.HelloWorld</key>
<value>Debug</value>
</entry>
<entry>
<key>com.bea.wlevs.cep.core.EPRuntimeImpl</key>
<value>Debug</value>
</entry>
</logger-severity-properties>
<log-file-config>myLogFileConfig</log-file-config>
</logging-service>
この例では、サーバのデフォルトのロギング重大度は WARNING です。ただし、com.bea.wlevs.ede パッケージ、sample.HelloWorld ユーザ アプリケーション、および com.bea.wlevs.cep.core.EPRuntimeImpl クラスに含まれるモジュールのロギング重大度は DEBUG です。
以下の節では、Oracle CEP デバッグ機能の使用方法を説明します。
以下の手順に従って、Java コマンドラインでシステム プロパティを設定できます。
例 : -Dcom.bea.core.debug.DebugSDS=true
コンフィグレーション ファイルからデバッグをコンフィグレーションするには、以下の手順を実行します。
「サンプル デバッグ コンフィグレーション」を参照してください。
次の表に、このリリースでサポートされているデバッグ フラグを示します。
次に示すコード例は、config.xml ファイルで SDS (Simple Declarative Services) デバッグをオンにするサンプル デバッグ コンフィグレーションです。
<config>
<debug>
<debug-properties>
<DebugSDS>true</DebugSDS>
</debug-properties>
</debug>
<logging-service>
<logger-severity>Debug</logger-severity>
<stdout-config>logStdout</stdout-config>
<log-file-config>logFile</log-file-config>
</logging-service>
<log-file><name>logFile</name><log-file-severity>Debug</log-file-severity>
<number-of-files-limited>true</number-of-files-limited>
<rotated-file-count>4</rotated-file-count>
<rotate-log-on-startup-enabled>true</rotate-log-on-startup-enabled>
</log-file>
<log-stdout>
<name>logStdout</name>
<stdout-severity>Debug</stdout-severity>
</log-stdout>
</config>
以下の節では、Log4j の使用方法に関する情報を示します。
Log4j は、アプリケーションにログ ステートメントを指定するために開発されたオープン ソースのツールです。Log4j には 3 つの主要なコンポーネントがあります。
Log4j Java ロギング機能は、Apache Foundation の Jakarta プロジェクトによって開発されました。以下を参照してください。
http://logging.apache.org/log4j/docs/)http://logging.apache.org/log4j/docs/api/index.htmlhttp://logging.apache.org/log4j/docs/manual)
Log4j には Logger クラスが定義されています。アプリケーションでは、それぞれユニークな名前を付けた複数のロガーを作成できます。Log4j の一般的な使用方法として、アプリケーションはログ メッセージを送信する各アプリケーション クラスの Logger インスタンスを作成します。ロガーはネームスペース階層内に存在し、階層の上位のロガーから動作を継承します。
Log4j には、ロギング出力の送り先を表すアペンダ (ハンドラ) が定義されています。複数のアペンダを定義できます。たとえば、アプリケーションでは、標準出力にメッセージを送信するアペンダと、ログ メッセージをファイルに書き込む別のアペンダを定義できます。個別のロガーをゼロ個以上のアペンダに書き込むようにコンフィグレーションできます。使用例の 1 つとして、すべてのロギング メッセージ (すべてのレベル) をログ ファイルに送信し、ERROR レベルのメッセージだけを標準出力に送信することができます。
Log4j には、ログ メッセージのフォーマットを制御するためのレイアウトが定義されています。各レイアウトは特定のメッセージ フォーマットを指定します。特定のレイアウトが各アペンダに関連付けられています。これにより、標準出力に対してファイル出力とは異なるログ メッセージ フォーマットを指定できます。次に例を示します。
デフォルトのコンフィグレーション ファイルは log4j.properties です。この指定は、log4j.configuration システム プロパティを使用してオーバーライドできます。https://www.qos.ch/shop/products/log4j/log4j-Manual.jsp を参照してください。
log4j.properties ファイルの例を次に示します。
log4j.rootLogger=debug, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=D:/log4j/logs/mywebapp.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger=DEBUG, R
Log4j Logger へのロギングを指定するには、コマンドラインで以下のシステム プロパティを設定します。
-Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryimpl -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger-Dlog4j.configuration=<URL>/log4j.properties
|