システム管理者と開発者は、ロギング出力を構成し、ログ・メッセージをフィルタ処理してエラーをトラブルシューティングしたり、特定のイベントの通知を受信したりします。
Oracle Stream Analyticsでは、Commons Apacheログ・フレームワーク、OSGiフレームワーク・ロガーおよびLog4jロガーのロギング・システムがサポートされます。Oracle Stream Analyticsでは、様々なデバッグ・オプションも提供され、これらのオプションを有効または無効にすることにより、使用するOracle Stream Analyticsアプリケーションを診断できます。
この章の内容は次のとおりです。
Oracle Stream Analyticsセキュリティ監査ロギングの詳細は、「セキュリティ監査プログラム」を参照してください。
様々なロギングの構成シナリオがあります。次に、共通のものの一部を紹介します。
DEBUG
メッセージおよびINFO
メッセージがログ・ファイルに記録されないようにします。
HTTPサブシステムからのINFO
レベルのメッセージを、標準出力ではなくログ・ファイルにパブリッシュできるようにします。
WARNING
レベル以上のメッセージをハンドラがパブリッシュするように指定します。
サーバー全体のデフォルトのロギング・レベルを指定し、特定のモジュールにデフォルトのロギング・レベルをオーバーライドさせます。たとえば、サーバーのデフォルトのロギング・レベルをWARNING
にする一方、モジュールのロギング・レベルをDEBUG
にすることができます。
デプロイしたアプリケーションのロギング・レベルを構成します。ログ・メッセージをサーバー全体の1個のログ・ファイルに出力する必要があり、サーバー・モジュールからもそのログ・ファイルにメッセージを記録する場合は、Commons Apacheログ・フレームワークをアプリケーションで使用する必要があります。
この項では、Commons Apacheログ・フレームワークについて説明します。
Oracle Event Processingでは、commons-logging
インタフェースが提供されます。このインタフェースでは、commons.logging.LogFactory
およびLog
インタフェースの実装が提供されます。そのインタフェースには、ロギング・モジュールのLoggingService
に委任されるorg.apache.commons.logging.Log
の実装を作成するファクトリとして動作するorg.apache.commons.logging.LogFactory
クラスの拡張が含まれています。デフォルトの実装名は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" );
weblogic.logging.commons.LogFactoryImpl
は、ログ・ファクトリが明示的に設定されない場合、デフォルトのログ・ファクトリです。
別のロギング実装を使用するには、標準のcommons loggingファクトリ実装を使用する必要があります。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
メッセージがログ・ファイルに書き込まれないわけではありません。ただし、DEBUG
メッセージは標準出力に書き込まれます。
ユーザー(Oracle Event Processingモジュールの所有者またはユーザー・アプリケーションの所有者)は、個別モジュールに対してApache commonsロギングで使用されるロギング・カテゴリ・タイプを表す名前を自由に定義できます。ただし、カテゴリ名がパッケージ名として定義されている場合は、ネーミング・ルールに基づいて、ロギング・レベル階層がデフォルトで想定されます。たとえば、2つのモジュールのロギング・カテゴリ名がcom.oracle.foo
とcom.oracle.foo.bar
である場合は、com.oracle.foo
がcom.oracle.foo.bar
のルート・ノードになります。このように、子ノードが親をオーバーライドしないかぎり、親ノード(com.oracle.foo
)に適用されるロギング・レベルが自動的にcom.oracle.foo.bar
に適用されます。
つまり、明示的に重大度が構成された最も近い親から重大度が継承されないかぎり、ノードに対して指定されているロギングの重大度が有効です。ルート・ノードは常に明示的に構成されるため、その他の設定がされていない場合は、すべてのノードがルートから重大度を継承します。
表14-1にログ・メッセージの重大度レベルを示します。
表14-1 ログ・メッセージ重大度
重大度 | 意味 |
---|---|
TRACE |
診断アクション・ライブラリからのメッセージの場合に使用します。サーバーおよびアプリケーション・クラスの診断インストゥルメンテーションを有効にすると、 |
DEBUG |
デバッグ・メッセージが生成されました。 |
INFO |
通常の処理を報告するために使用する、低レベルの情報メッセージ。 |
NOTICE |
重要度が高い情報メッセージ。 |
WARNING |
不審なオペレーションまたは構成が発生しましたが、通常のオペレーションには影響しません。 |
ERROR |
ユーザー・エラーが発生したことを示します。システムまたはアプリケーションでは、割込みやサービスの限定的な低下を起こすことなくエラーに対処できます。 |
CRITICAL |
システム・エラーまたはサービス・エラーが発生したことを示します。システムをリカバリできますが、サービスの一時的な損失や永久的な低下が発生する場合があります。 |
ALERT |
特定のサービスが使用不能の状態にある一方で、システムのほかの部分は依然として機能しています。自動リカバリを実行できません。この問題を解決するには、管理者がすぐに措置を講じる必要があります。 |
EMERGENCY |
サーバーが使用不能な状態にあります。この重大度は、重大なシステム障害または問題があることを示します。 |
システムでは、重大度の低いメッセージが数多く生成され、重大度の高いメッセージは少なくなります。たとえば、通常の環境では、INFO
メッセージが多く生成され、EMERGENCY
メッセージは生成されません。
デフォルトでは、Oracle Event Processingサーバーは/Oracle/Middleware/my_oep/
user_projects/domains/
DOMAIN_DIR
/
servername
ディレクトリ内のserver.log
およびconsoleoutput.log
ファイルにログ・メッセージを書き込み、ここで、DOMAIN_DIR
はドメイン・ディレクトリ(my_domain
など)、servername
はサーバー・インスタンス・ディレクトリ(myServer1
など)です。
ログ・ファイル属性の構成は、「log-file」を参照してください。
Oracle Event Processingサーバーは、書き込むログ・ファイルのタイプによって異なるフォーマットでログ・メッセージを書き込みます。
システムはメッセージを指定されたログ・ファイルに書き込み、メッセージは、####
接頭辞、タイムスタンプ
、重大度
、サブシステム
、サーバー名
、接続
、スレッドID
またはユーザーID
またはトランザクションID
、メッセージID
、メッセージ
とスタック・トレース(ある場合)で構成されます。各属性は山カッコで囲まれます。
次に示すのは、サーバー・ログ・ファイルのメッセージ例です(読みやすくするために分割してありますが、実際にはメッセージは1行にある可能性があります)。
####<May 25, 2015 10:23:32 AM EST> <Notice> <Deployment> <> <myServer> <RMI TCP Connection(4)-141.144.123.236> <> <> <> <1235575412801> <BEA-2045000> <The application bundle "Hello" was deployed successfully to file [C:\Oracle\Middleware\my_oep\user_projects\domains\oep_domain\defaultserver\applications\Hello\Hello.jar] with version 1235575412708>
システムはメッセージをコンソール、標準出力または標準エラーに書き込みます。メッセージは、ロケール形式のタイムスタンプ
、重大度
、サブシステム
、メッセージID
およびメッセージ
で構成されます。
次に示すのは、前のセクションからのメッセージが標準出力に出力される仕組みの例です(読みやすくするために分割してありますが、実際にはメッセージは1行にある可能性があります)。
<May 25, 2015 10:23:32 AM EST> <Notice> <Deployment> <BEA-2045000> <The application bundle "Hello" was deployed successfully to file [C:\Oracle\Middleware\my_oep\user_projects\domains\oep_domain\defaultserver\applications\Hello\Hello.jar] with version 1235575412708>
Oracle Event Processingには、OSGiフレームワークよりも前に起動する低レベルのフレームワーク・ロガーがあります。このロガーはOSGiフレームワーク内部のロギング・イベントを報告するために使用され、ロギング・サブシステムが構成されるまでロギング・サブシステムのカスタム・デフォルトとして機能します。
たとえば、ユーザーに表示されるログ・メッセージのレベルまたは重大度はconfig.xml
での設定より低く、コンソールのLauncherコマンド・ラインまたはログ・ファイルでの設定と同じまたはそれより高い可能性があります。ロギング・サブシステムが起動するまで、ログ・メッセージはフレームワーク・ロガーから送信され、フレームワークのロギング・レベルを使用してメッセージがフィルタ処理されます。
Log4jは、アプリケーション内にログ文を入れるために開発されたオープン・ソースのツールです。Log4jには、ロガー、アペンダおよびレイアウトの3つのメイン・コンポーネントがあり、それらはすべてこの項で説明します。
Log4jロギング機能は、Apache FoundationのJakartaプロジェクトによって開発されています。参照:
Log4jプロジェクトは、http://logging.apache.org/log4j/を参照してください。
Log4j APIは、http://logging.apache.org/log4j/1.2/apidocs/index.htmlを参照してください。
Log4jの簡単な説明は、http://logging.apache.org/log4j/1.2/manual.htmlを参照してください。
Log4jには、Logger
クラスを定義します。1つのアプリケーションで、各々が一意の名前を持つ複数のロガーを作成できます。Log4jの一般的な使い方では、アプリケーションで、ログ・メッセージを出力する各アプリケーション・クラスのLogger
インスタンスが作成されます。ロガーはネームスペース階層内に存在し、階層の上位のロガーから動作を継承します。
Log4jには、ロギング出力の宛先を表すアペンダ(ハンドラ)を定義します。複数のアペンダを定義できます。たとえば、1つのアプリケーションで、ログ・メッセージを標準出力に送信するアペンダと、ファイルに書き込むアペンダを定義できます。個々のロガーを構成して、0または1つ以上のアペンダに書き込むように構成することもできます。一例としては、すべてのロギング・メッセージ(全レベル)をログ・ファイルに送信する一方で、標準出力にはERROR
レベル・メッセージのみを送信する使い方があります。
Oracle Stream Analytics Visualizerを使用するかOracle Stream Analyticsサーバーのconfig.xml
ファイルを編集することにより、Oracle Stream Analyticsロギング・サービス属性を構成します。
config.xml
ファイルは/Oracle/Middleware/my_oep/
user_projects/domains/
DOMAIN_DIR
/
servername
/config
ディレクトリにあり、ここでDOMAIN_DIR
はドメイン・ディレクトリ(my_domain
など)、servername
はサーバー・インスタンス・ディレクトリ(myServer1
など)です。
次の例は、ロギング要素を含む一般的なOracle Stream Analyticsサーバーのconfig.xml
ファイルを示しています。
<?xml version="1.0" encoding="UTF-8"?> <!--Sample XML file generated by XMLSpy v2007 sp2 (http://www.altova.com)--> <n1:config xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/server wlevs_server_config.xsd" xmlns:n1="http://www.bea.com/ns/wlevs/config/server" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ... <name>myLogService</name> <log-file-config>myFileConfig</log-file-config> <stdout-config>myStdoutConfig</stdout-config> <logger-severity>Notice</logger-severity> <logger-severity-properties> <entry> <key>LifeCycle</key> <value>Notice</value> </entry> <entry> <key>Management</key> <value>Notice</value> </entry> <entry> <key>CQLProcessor</key> <value>Notice</value> </entry> <entry> <key>CqlProcessor</key> <value>Notice</value> </entry> <entry> <key>Stream</key> <value>Notice</value> </entry> <entry> <key>Ede</key> <value>Notice</value> </entry> <entry> <key>Cache</key> <value>Notice</value> </entry> <entry> <key>Adapters</key> <value>Notice</value> </entry> <entry> <key>Spring</key> <value>Notice</value> </entry> <entry> <key>Channel</key> <value>Notice</value> </entry> <entry> <key>Recplay</key> <value>Notice</value> </entry> <entry> <key>Monitor</key> <value>Notice</value> </entry> <entry> <key>Server</key> <value>Notice</value> </entry> <entry> <key>EventTrace</key> <value>Notice</value> </entry> <entry> <key>Deployment</key> <value>Notice</value> </entry> </logger-severity-properties> </logging-service> <log-file> <name>myFileConfig</name> <rotation-type>none</rotation-type> </log-file> <log-stdout> <name>myStdoutConfig</name> <stdout-severity>Debug</stdout-severity> </log-stdout> </n1:config>
次の項では、Oracle Stream Analyticsロギングの構成について説明します。
この項では、logging-service
要素について説明します。
表14-2 logging-serviceの構成パラメータ
パラメータ | データ型 | 説明 |
---|---|---|
name |
String |
この構成オブジェクトの名前。 |
log-file-config |
String |
ログ・ファイルとそのローテーション・ポリシーの構成。 「log-file」を参照してください。 |
stdout-config |
String |
|
logger-severity |
String |
ハンドラに伝播されるメッセージのしきい値の重要度を定義します。 デフォルト値は、
有効な値は次のとおりです: |
logger-severity-properties |
1つ以上の |
「個別モジュールの重大度の構成」を参照してください。 |
この項では、log-file
要素について説明します。
表14-3 log-fileの構成パラメータ
パラメータ | データ型 | 説明 |
---|---|---|
name |
String |
この構成オブジェクトの名前。 |
base-log-file-name |
String |
ログ・ファイル名。デフォルト値は |
log-file-severity |
String |
ログ・ファイルに書き込む最も重大度の低いメッセージを指定します。デフォルト値は 有効な値は次のとおりです。
|
log-file-rotation-dir |
String |
ローテーションされた古いファイルを格納するディレクトリを指定します。 設定しない場合、古いファイルはベース・ログ・ファイルとして同一ディレクトリ内に保存されます。 |
rotation-type |
String |
ローテーションをサイズに基づいて実行するか、時間に基づいて実行するか、または実行しないかを指定します。 有効な値は次のとおりです。
|
rotation-time |
String |
時間は デフォルトは |
rotation-time-span-factor |
Long |
時間ベースのログ・ローテーションの頻度となるミリ秒数を決定するために、時間間隔に適用される係数。デフォルトは |
rotated-file-count |
Integer |
|
rotation-size |
Integer |
ログ・ファイルがローテーションされるサイズのしきい値(KB単位)。デフォルトは |
rotation-time-span |
Integer |
時間ベースのすべてのログ・ローテーションについて、間隔を指定します。デフォルト値は |
rotate-log-on-startup-enabled |
Boolean |
|
number-of-files-limited |
Boolean |
|
この項では、log-stdout
要素について説明します。
表14-4 log-stdoutの構成パラメータ
パラメータ | データ型 | 説明 |
---|---|---|
name |
String |
この構成オブジェクトの名前。 |
stdout-severity |
String |
stdoutに送信されるメッセージのしきい値の重大度。デフォルト値は 有効な値は次のとおりです。
|
stack-trace-depth |
Integer |
stdoutに表示するスタック・トレース・フレームの数。 デフォルト値 |
stack-trace-enabled |
Boolean |
trueの場合、ログに記録されたメッセージにスタック・トレースが含まれているときは、スタック・トレースがコンソールにダンプされます。デフォルト値は |
Oracle Event Processingはオープン・ソース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パッケージをインポートするためにアプリケーションのMANIFEST.MF
ファイルを更新します。
Import-Package: org.apache.log4j;version="1.2.13", org.apache.log4j.config;version="1.2.13", ...
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
-Dlog4j.debug=true
は、非常に重要なもう1つのコマンド・ライン・プロパティです。このプロパティは、log4j出力に失敗した場合または暗号エラー・メッセージが返された場合に使用します。
log4j出力に失敗した場合または暗号エラー・メッセージが返された場合に、-Dlog4j.debug=true
のコマンド・ライン・プロパティをコマンド・ラインで使用します。
詳細は、「Log4jロギングの有効化」を参照してください。
Oracle Event Processingのserver.log
およびconsoleoutput.log
ファイルにアプリケーション固有のメッセージを記録するために、Oracle Event Processingアプリケーション内のApache CommonsロギングAPIを使用できます。
commonsロギングAPIを使用するには:
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 Event Processingアプリケーションの問題を診断できます。
表14-6は、Oracle Event Processingが提供するデバッグ・オプションを示しています。
表14-6 デバッグ・フラグ
デバッグ・フラグ | 説明 |
---|---|
com.bea.core.debug.DebugBootBundle |
ブート・デバッグ |
com.bea.core.debug.DebugBootBundle.stdout |
ブート・デバッグのデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugCM |
構成マネージャ |
com.bea.core.debug.DebugCM.stdout |
構成マネージャのデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugConfigurationRuntime |
ランタイムMBeanからのランタイム情報 |
com.bea.core.debug.DebugCSS |
CSS |
com.bea.core.debug.DebugCSS.stdout |
CSSのデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugCSSServices |
CSSサービス |
com.bea.core.debug.DebugCSSServices.stdout |
CSSサービスのデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugJDBCConn |
JDBC接続 |
com.bea.core.debug.DebugJDBCInternal |
JDBC内部 |
com.bea.core.debug.DebugJDBCRMI |
JDBC RMI |
com.bea.core.debug.DebugJDBCSQL |
JDBC SQL |
com.bea.core.debug.DebugJTA2PC |
JTA 2PC |
com.bea.core.debug.DebugJTA2PCDetail |
JTA 2PCDetail |
com.bea.core.debug.DebugJTA2PCStackTrace |
JTA 2PCStackTrace |
com.bea.core.debug.DebugJTAGateway |
JTAゲートウェイ |
com.bea.core.debug.DebugJTAGatewayStackTrace |
JTA GatewayStackTrace |
com.bea.core.debug.DebugJTAHealth |
JTAヘルス |
com.bea.core.debug.DebugJTAJDBC |
JTA JDBC |
com.bea.core.debug.DebugJTALifecycle |
JTAライフサイクル |
com.bea.core.debug.DebugJTALLR |
JTA LLR |
com.bea.core.debug.DebugJTAMigration |
JTA移行 |
com.bea.core.debug.DebugJTANaming |
JTAネーミング |
com.bea.core.debug.DebugJTANamingStackTrace |
JTA NamingStackTrace |
com.bea.core.debug.DebugJTANonXA |
JTA NonXA |
com.bea.core.debug.DebugJTAPropagate |
JTAの伝播 |
com.bea.core.debug.DebugJTARecovery |
JTAのリカバリ |
com.bea.core.debug.DebugJTAResourceHealth |
JTA ResourceHealth |
com.bea.core.debug.DebugJTATLOG |
JTA TLOG |
com.bea.core.debug.DebugJTAXA |
JTA XA |
com.bea.core.debug.DebugJTAXAStackTrace |
JTA XAStackTrace |
com.bea.core.debug.DebugNetIO |
NetIO |
com.bea.core.debug.DebugOX |
OSGiからJMX (OX)へ |
com.bea.core.debug.DebugOX.stdout |
OSGiからJMX (OX)へ - デバッグが標準出力に送られます。 |
com.bea.core.debug.DebugSCP |
簡易構成プロバイダ |
com.bea.core.debug.DebugSCP.stdout |
Simple Configuration Providerのデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugSDS |
単純な宣言サービス |
com.bea.core.debug.DebugSDS.stdout |
SDSデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugServiceHelper |
サービス・ヘルパー |
com.bea.core.debug.DebugServiceHelper.stdout |
サービス・ヘルパーのデバッグ文字列がstdoutに送られます |
com.bea.core.debug.DebugStoreAdmin |
ストア管理 |
com.bea.core.debug.DebugStoreIOLogical |
ストアIOLogical |
com.bea.core.debug.DebugStoreIOLogicalBoot |
ストアIOLogicalBoot |
com.bea.core.debug.DebugStoreIOPhysical |
ストアIOPhysical |
com.bea.core.debug.DebugStoreIOPhysicalVerbose |
ストアIOPhysicalVerbose |
com.bea.core.debug.DebugStoreXA |
ストアXA |
com.bea.core.debug.DebugStoreXAVerbose |
ストアXAVerbose |
com.bea.core.debug.servicehelper.dumpstack |
サービス・ヘルパーがタイムアウトしたときにスタック・トレースをダンプします。 |
次の項では、これらのOracle Event Processingデバッグ・オプションの使用方法を説明します。
Log4jロギングを使用している場合は、「Log4jロギングのデバッグ」も参照してください。
この項では、構成ファイルを使用してデバッグ・オプションを構成する手順を説明します。
構成ファイルからデバッグを構成するには、次の手順を実行します。
この手順では、Oracle Event Processingサーバーconfig.xml
ファイルのSimple Declarative Services (SDS)デバッグ(表14-6からのcom.bea.core.debug.DebugSDS
)をオンにします。
構成ファイルを使用したデバッグ・オプションの構成