3 WebLogic Serverログ・メッセージのフィルタリング
関連情報については、以下を参照してください。
-
WebLogic Serverインスタンスに対するログ・フィルタの設定方法については、Oracle WebLogic Remote Consoleオンライン・ヘルプのログ・メッセージのフィルタ処理に関する項を参照してください。
-
メッセージ・ハンドラの作成方法およびサブスクライブ方法については、「メッセージのサブスクライブ」を参照してください。
- ロガーとハンドラの役割
WebLogic Serverメッセージ・カタログおよびNonCatalogLogger
でメッセージが生成されるとき、それらのメッセージはjava.util.logging.Logger
オブジェクトに配信されます。Logger
オブジェクトは、Logger
をサブスクライブしているメッセージ・ハンドラにメッセージをパブリッシュします。 - 重大度などの条件によるメッセージのフィルタリング
WebLogic Serverメッセージ・カタログおよびNonCatalogLogger
でメッセージが生成されるときには、メッセージの重大度がweblogic.logging.WLLevel
オブジェクトに変換されます。 - ロガーとハンドラに対する重大度の設定
メッセージを重大度によってフィルタ処理するには、WLSTコマンドを使用してHandler
オブジェクトおよびLogger
オブジェクトの重大度を設定できます。 - ロガーとハンドラのフィルタの設定
Logger
オブジェクトでフィルタを設定した場合、そのフィルタはオブジェクトがどのメッセージをパブリッシュするのかを指定します。したがって、フィルタはLogger
オブジェクトに登録されているすべてのハンドラにも影響します。Handler
でフィルタを設定した場合、そのフィルタはその特定のハンドラの動作にのみ影響します。
ロガーとハンドラの役割
WebLogic Serverメッセージ・カタログおよびNonCatalogLogger
でメッセージが生成されるとき、それらのメッセージはjava.util.logging.Logger
オブジェクトに配信されます。Logger
オブジェクトは、Logger
をサブスクライブしているメッセージ・ハンドラにメッセージをパブリッシュします。
WebLogic Serverでは、以下の3つの異なるコンテキストでLogger
オブジェクトおよびHandler
オブジェクトがインスタンス化されます。詳細は、図3-1を参照してください。
-
WebLogicロギング・サービスを使用するクライアントJVMで。このクライアント
Logger
オブジェクトは、クライアントJVMで動作するクライアント・アプリケーションから送信されるメッセージをパブリッシュします。以下のハンドラが、クライアントJVMの
Logger
オブジェクトをサブスクライブします。-
ConsoleHandler
。クライアントJVMからのメッセージをクライアントの標準出力に出力します。クライアントJVMで
-Dweblogic.log.StdoutSeverityLevel
Java起動オプションを使用すると、WebLogicロギング・サービスにより、ハンドラから標準出力に書き込まれるメッセージを制限するフィルタがこのハンドラ用に作成されます。『Oracle WebLogic ServerにデプロイされたアプリケーションへのWebLogicロギング・サービスの追加』のクライアント・アプリケーションからのメッセージの書込みに関する項を参照してください。 -
FileStreamHandler
。クライアントJVMからのメッセージをクライアントのログ・ファイルに書き込みます。
-
-
WebLogic Serverの各インスタンスで。このサーバー
Logger
オブジェクトは、サーバー・インスタンスで動作するサブシステムおよびアプリケーションから送信されるメッセージをパブリッシュします。以下のハンドラが、サーバー
Logger
オブジェクトをサブスクライブします。-
ConsoleHandler
。メッセージをサーバーの標準出力に出力できるようにします。 -
FileStreamHandler
。サーバー・ログ・ファイルにメッセージを書き込みます。 -
内部ハンドラ。ドメイン・ログおよびJMXクライアントにメッセージをブロードキャストし、管理サーバーにメッセージをパブリッシュします。
-
-
管理サーバーはサーバー
Logger
オブジェクトに加えてドメインLogger
オブジェクトも管理します。ドメインLogger
オブジェクトは、各管理対象サーバーのLogger
オブジェクトからメッセージを受信します。以下のハンドラが、ドメイン
Logger
オブジェクトをサブスクライブします。-
FileStreamHandler
。ドメイン・ログ・ファイルにメッセージを書き込みます。
-
重大度などの条件によるメッセージのフィルタリング
NonCatalogLogger
でメッセージが生成されるときには、メッセージの重大度がweblogic.logging.WLLevel
オブジェクトに変換されます。WLLevel
オブジェクトは、以下の値(影響の小さい方から大きい方の順で並んでいます)のいずれかを指定できます。
Trace
,Debug
,Info
,Notice
,Warning
,Error
,Critical
,Alert
,Emergency
Logger
オブジェクトは、デフォルトでは全レベルのメッセージをパブリッシュします。Logger
オブジェクトがパブリッシュする最低レベルのメッセージを設定するには、単純なLogger.setLevel
APIを使用します。メッセージを受信すると、Logger
オブジェクトはそのメッセージのレベルとsetLevel
APIで設定されたレベルを照合します。メッセージのレベルがLogger
のレベルより下である場合は、すぐに復帰します。メッセージのレベルがLogger
のレベルより上である場合、Logger
はそのメッセージを説明するWLLogRecord
オブジェクトを割り当てます。
たとえば、Logger
オブジェクトのレベルをWarning
に設定した場合、Logger
オブジェクトはWarning
、Error
、Critical
、Alert
、またはEmergency
のメッセージのみをパブリッシュします。
Logger
オブジェクトがパブリッシュするメッセージをより細かく管理できるようにするために、フィルタを作成して設定することもできます。フィルタとは、WLLogRecord
オブジェクトのデータを一連の条件と比較するクラスのことです。Logger
オブジェクトは、フィルタの条件を満たすWLLogRecord
オブジェクトだけをパブリッシュします。たとえば、フィルタを使用してJDBCサブシステムからのメッセージのみパブリッシュするようにLogger
を構成できます。フィルタを作成するには、java.util.logging.Filter
オブジェクトをインスタンス化し、Logger.setFilter
APIを使用してそれをLogger
オブジェクトに設定します。
Logger
オブジェクトがパブリッシュするメッセージのレベルとフィルタを設定するかわりに(またはそれに加えて)、個々のメッセージ・ハンドラでレベルとフィルタを設定することもできます。
たとえば、Logger
がWarning
レベル以上のメッセージをパブリッシュするように指定できます。その場合、さらに各ハンドラで以下のように設定できます。
-
ConsoleHandler
において、JDBC、JMS、およびEJBサブシステムからのAlert
メッセージのみを選択するレベルとフィルタを設定します。設定するとJDBC、JMS、およびEJBサブシステムからのAlert
メッセージのみが標準出力で表示されます。 -
FileStreamHandler
においては、レベルまたはフィルタ条件を追加設定しません。Logger
オブジェクトはWarning
レベル以上のメッセージのみをパブリッシュするように構成されているので、ログ・ファイルには、すべてのサブシステムからの、重大度がWarning
以上のすべてのメッセージが格納されます。 -
重大度が
Warning
以上のすべてのメッセージを管理サーバーのドメイン全体のメッセージ・ログにパブリッシュします。
ロガーとハンドラに対する重大度の設定
メッセージを重大度によってフィルタ処理するには、WLSTコマンドを使用してHandler
オブジェクトおよびLogger
オブジェクトの重大度を設定できます。
WLSTコマンドを使用すると、標準MBeanコマンドでHandler
オブジェクトに対する重大度を設定できます。 Logger
オブジェクトに対して重大度を設定するには、Logger
APIを使用できます。ロガーの重大度は、WLSTまたはコマンド行からも設定することができます。「ロガーの重大度の指定」を参照してください。WLSクライアント(EJBクライアント、Webサービス・クライアントなど)のロガーおよびハンドラの重大度を構成するには、JavaロギングAPIを使用する必要があります。
ハンドラに対する重大度の設定
APIを使用してHandler
オブジェクトの重大度を設定するには、次のように動作するクラスを作成します(例3-1を参照)。
例: ハンドラに対する重大度の設定
次の例は、APIを使用してハンドラに対する重大度を設定する方法を示します。
例3-1 例: APIを使用したHandlerオブジェクトの重大度の設定
import java.util.logging.Logger; import java.util.logging.Handler; import weblogic.logging.LoggingHelper; import weblogic.logging.WLLevel; public class LogLevel { public static void main(String[] argv) throws Exception { Logger serverlogger = LoggingHelper.getServerLogger(); Handler[] handlerArray = serverlogger.getHandlers(); for (int i=0; i < handlerArray.length; i++) { Handler h = handlerArray[i]; if(h.getClass().getName().equals ("weblogic.logging.ConsoleHandler")){ h.setLevel(WLLevel.Alert); } } } }
親トピック: ハンドラに対する重大度の設定
例: 標準出力ハンドラに対する重大度の設定
コマンド行を使用すると、LogMBean
インタフェースでHandler
オブジェクトの重大度を構成できます。
-
例3-2のWLSTコマンドは、標準出力ハンドラの重大度を
Info
に設定します。
WebLogic Scripting Toolの理解のWebLogic Scripting Toolの使用を参照してください。setStdoutSeverity
の詳細は、Oracle WebLogic Server MBeanリファレンスのLogMBean
に関する項を参照してください。
例3-2 標準出力ハンドラに対する重大度の設定
C:\>java weblogic.WLST wls:/offline> connect('username','password') wls:/mydomain/serverConfig> edit() wls:/mydomain/edit> startEdit() wls:/mydomain/edit !> cd("Servers/myserver/Log/myserver") wls:/mydomain/edit/Servers/myserver/Log/myserver !> cmo.setStdoutSeverity("Info") wls:/mydomain/edit/Servers/myserver/Log/myserver !> save() wls:/mydomain/edit/Servers/myserver/Log/myserver !> activate()
親トピック: ハンドラに対する重大度の設定
ロガーとハンドラのフィルタの設定
Logger
オブジェクトでフィルタを設定した場合、そのフィルタはオブジェクトがどのメッセージをパブリッシュするのかを指定します。したがって、フィルタはLogger
オブジェクトに登録されているすべてのハンドラにも影響します。Handler
でフィルタを設定した場合、そのフィルタはその特定のハンドラの動作にのみ影響します。
WLSTを使用すると、標準MBeanコマンドでHandler
オブジェクトに対するフィルタを設定できます。Logger
オブジェクトにフィルタを設定するには、Logger
APIを使用する必要があります。クライアント側ロギングの場合、フィルタはJavaロギングAPIでのみ設定できます。
フィルタを設定するには:
-
java.util.logging.Filter
を実装するクラスを作成します。そのクラスには、
Filter.isLoggable
メソッドと、受信メッセージを評価するロジックが必要です。ロジックがtrueと評価した場合、isLoggable
メソッドはLogger
オブジェクトがそのメッセージをパブリッシュできるようにします。 -
Logger
オブジェクトが動作しているJVMのクラスパスにフィルタ・オブジェクトを配置します。 -
Logger
オブジェクトのフィルタを設定するには、次のように動作するクラスを作成します。以下の
LoggingHelper
メソッドの1つを呼び出します。-
getClientLogger
(現在のコンテキストがクライアントJVMである場合)。 -
getServerLogger
(現在のコンテキストがサーバーJVMであり、かつローカル・サーバー・ログを管理するためにサーバーで使用されるLogger
オブジェクトをフィルタ処理する必要がある場合)。 -
getDomainLogger
(現在のコンテキストが管理サーバーであり、かつドメイン・サーバー・ログを管理するLogger
オブジェクトをフィルタ処理する必要がある場合)。
Logger.setFilter(Filter newFilter)
メソッドを呼び出します。 -
-
APIを使用して
Handler
オブジェクトのフィルタを設定するには、次のように動作するクラスを作成します。以下の
LoggingHelper
メソッドの1つを呼び出します。-
getClientLogger
(現在のコンテキストがクライアントJVMである場合)。 -
getServerLogger
(現在のコンテキストがサーバーJVMであり、かつローカル・サーバー・ログを管理するためにサーバーで使用されるLogger
オブジェクトをフィルタ処理する必要がある場合)。 -
getDomainLogger
(現在のコンテキストが管理サーバーであり、かつドメイン・サーバー・ログを管理するLogger
オブジェクトをフィルタ処理する必要がある場合)。
-
レベルを設定する必要のある
Handler
オブジェクトが見つかるまでハンドラの配列を検索します。Handler.getClass().getName()
を使用すると、現在の配列索引が示しているハンドラのタイプがわかります。 -
Handler.setFilter(Filter newFilter)
メソッドを呼び出します。
-
Deployerサブシステムからのすべてのメッセージを拒否するクラスのサンプルを次に示します。
import java.util.logging.Logger; import java.util.logging.Filter; import java.util.logging.LogRecord; import weblogic.logging.WLLogRecord; import weblogic.logging.WLLevel; public class MyFilter implements Filter { public boolean isLoggable(LogRecord record) { if (record instanceof WLLogRecord) { WLLogRecord rec = (WLLogRecord)record; if (rec.getLoggerName().equals("Deployer")) { return false; } else { return true; } } else { return false; } } }
コマンド行を使用すると、LogMBean
インタフェースでHandler
オブジェクトのフィルタを構成できます。
-
次の例のWLSTコマンドは、ドメイン・ログ・ブロードキャスタに対するフィルタを作成して設定します。
C:\>java weblogic.WLST wls:/offline> connect('username','password') wls:/mydomain/serverConfig> edit() wls:/mydomain/edit> startEdit() wls:/mydomain/edit !> cmo.createLogFilter('myFilter') wls:/mydomain/edit !> cd("Servers/myserver/Log/myserver") wls:/mydomain/edit/Servers/myserver/Log/myserver !> cmo.setDomainLogBroadcastFilter(getMBean('/LogFilters/myFilter')) wls:/mydomain/edit/Servers/myserver/Log/myserver !> save() wls:/mydomain/edit/Servers/myserver/Log/myserver !> activate()
WLSTの使用に関する詳細は、『WebLogic Scripting Toolの理解』のWebLogic Scripting Toolの使用に関する項を参照してください。setDomainLogBroadcastFilter
の詳細は、Oracle WebLogic Server MBeanリファレンスのLogMBean
に関する項を参照してください。
ドメイン・ログ・メッセージのフィルタリング
各管理対象サーバーからドメイン・ログにパブリッシュされるメッセージをフィルタ処理するには、WLSTまたはWebLogicリモート・コンソールを使用してドメイン・ログのログ・フィルタを作成できます。リモート・コンソールを使用してログ・フィルタを作成する方法の詳細は、Oracle WebLogic Remote Consoleオンライン・ヘルプのログ・フィルタの作成に関する項を参照してください。
ただし、サーバー・インスタンスのログ・ファイルを管理するLogger
オブジェクトでJavaロギングの重大度またはフィルタを設定すると、ドメイン・ログ・フィルタは無効となります。たとえば、サーバーのLogger
オブジェクトの重大度がWarning
に設定されている場合、ドメイン・ログ・フィルタはWarning
レベル以上のメッセージのみを受信します。
1つまたは複数のサーバーがドメイン・ログに送信するメッセージを変更するドメイン・ログ・フィルタを定義できます。デフォルトでは、重大度がNotice
以上のすべてのメッセージが送られます。
ノート:
重大度がDebug
のメッセージは、フィルタを使用してもドメイン・ログには送信されません。
WebLogicリモート・コンソールを使用したWebLogic Serverインスタンスのドメイン・ログ・フィルタの構成の詳細は、Oracle WebLogic Remote Consoleオンライン・ヘルプのログ・メッセージのフィルタ処理に関する項を参照してください。
親トピック: ロガーとハンドラのフィルタの設定