JSR-047 と共通ロギング・サポート

ログおよびトレース・アナライザーは、 以下のロギング・ユーティリティーの新規ユーザーと既存ユーザーに、 スタンドアロンおよびプラグインのサポートを提供します。

このサポートの詳細は、以下の通りです。

  1. メッセージをロギング・エージェントにエクスポートする機能
    org.eclipse.hyades.logging.java パッケージの下にある、 java.util.logging.Handler 抽象クラスの拡張機能では、 ログ・メッセージをロギング・エージェントにエクスポートするよう、 ロガーを構成することができます。
    この org.eclipse.hyades.logging.java.LoggingAgentHandler ハンドラーは、 ロガーに書き込まれる java.util.logging.LogRecord ログ・メッセージを、 ハンドラーのフィルターとロギング・レベルを基に、ログに記録できるかどうかをチェックします。 ログ・メッセージがログに記録される場合は、メッセージをログに記録するロガーと 同じ名前でロギング・エージェントが作成されます。メッセージは、 org.eclipse.hyades.logging.java.XmlFormatter を使用してフォーマットされ、 ロギング・エージェントに書き込まれます。
     
  2. ログ・メッセージを XML に変換する機能
    org.eclipse.hyades.logging.java パッケージの下にある java.util.logging.Formatter 抽象クラスの拡張機能では、 org.eclipse.hyades.logging.java.LoggingAgentHandler およびその他の ハンドラーは java.util.logging.LogRecord ログ・メッセージを XML にフォーマットすることができます。この org.eclipse.hyades.logging.java.XmlFormatter フォーマッターは、 java.util.logging.LogRecord メッセージを XML と同等の、 現行の org.eclipse.hyades.internal.logging.core.XmlGenerator 実装に変換しますが、 ホスト、プロセス、およびエージェント・タグは除外されます。生成された XML は フォーマットされず、最大ネスト・レベルは 4 に設定されています。 フォーマットを行う場合、オブジェクトは org.eclipse.hyades.logging.core.IExternalizableToXml インターフェース を実装するかどうかチェックされます。実装する場合は、パフォーマンス上の理由で、 イントロスペクションの手段により、XML シリアライゼーションの代わりに、 externalizeCanonicalXmlString() API が呼び出されます。

    以下の出力は、ログ・メッセージ (ストリング "Hello World" (ロギング・レベルは「重大」)) の XML 変換を示したものです。
       <LogRecord logging.util.id="java.util.logging.LogRecord_10468105484720000"
       logging.util.agent_idref="org.eclipse.hyades.tests.java.JavaLoggingTest"
       logging.util.MsgLoggerLevel="SEVERE" LoggerName="org.eclipse.hyades.tests.java.JavaLoggingTest"
       ResourceBundleName="null" SequenceNumber="0" SourceClassName="org.eclipse.hyades.tests.java.JavaLoggingTest"
       SourceMethodName="main" Message="Hello World" ThreadID="10"
       Millis="1046810548171">
       	<ResourceBundle Instance_Name="ResourceBundle" Value="null"/>
    	<Level Instance_Name="Level" logging.util.id="java.util.logging.Level_10468105484720001"
       		ResourceBundleName="sun.util.logging.resources.logging" Name="SEVERE"
       		LocalizedName="SEVERE"><Class Instance_Name="Class" logging.util.id="java.lang.Class_10468105484720002"
       		Name="java.util.logging.Level" Type="class" Package="java.util.logging"
       		Modifers="public" Superclass="java.lang.Object" />
       	</Level>
       	<Array Instance_Name="Parameters" Value="null" />
    	<Throwable Instance_Name="Thrown" Value="null" />
    	<Class Instance_Name="Class" logging.util.id="java.lang.Class_10468105484820000"
    	   Name="java.util.logging.LogRecord" Type="class" Package="java.util.logging"
    	   Modifers="public" Superclass="java.lang.Object" />
      </LogRecord>

  3. 拡張クラスを既存の Java ロギング API にブートストラップする機能
    org.eclipse.hyades.logging.java14 拡張クラスを JDK 1.4.0 以上の既存の Java ロギング API にブートストラップするには、 VM の開始前、または java.util.logging.LogManager.readConfiguration() API が 呼び出される前に、以下の項目を JRE_HOME\lib\logging.properties 構成ファイル に追加する必要があります。
    handlers= <your current handlers>, org.eclipse.hyades.logging.java.LoggingAgentHandler
    org.eclipse.hyades.logging.java.LoggingAgentHandler.formatter = org.eclipse.hyades.logging.java.XmlFormatter
    
     

    あるいは、org.eclipse.hyades.logging.java14 プラグイン拡張クラスを、 JDK 1.4.0 以上の既存の Java ロギング API で、実行時に、 addHandler()setFormatter() API を、 それぞれロガー (たとえば、ハンドラー) とハンドラー (たとえば、フォーマッター) に対し、 方針に基づいて使用することができます。
     

  4. 共通ベース・イベントをログ・レコードに組み込む機能
    org.eclipse.hyades.logging.java パッケージの下にある、 java.util.logging.LogRecord クラスの拡張機能により、 org.eclipse.hyades.logging.events.ICommonBaseEvent を  java.util.logging.LogRecord に組み込むための、 カスタマイズ・ログ・レコードを作成することができます。

    この org.eclipse.hyades.logging.java.CommonBaseEventLogRecord は 単純に java.util.logging.LogRecord を拡張して、 org.eclipse.hyades.logging.events.ICommonBaseEvent への単一参照 を含めます。ユーザーは java.util.logging.Logger に書き込む前に、 新規 org.eclipse.hyades.logging.java.CommonBaseEventLogRecord オブジェクト を作成する必要があります。
     
  5. ログに記録されたレコードをフィルター操作して、 ハンドラー・クラスによって処理されないようにする機能
    org.eclipse.hyades.logging.java.CommonBaseEventFilter (これは、org.eclipse.hyades.logging.java.CommonBaseEventLogRecord だけが 正常にログに記録されることを許可する) などの java.util.logging.Filter インターフェースの実装を設定し、 ハンドラーで java.util.logging.Level をロギングすることにより、 ログに記録されたレコードをフィルター操作して、 org.eclipse.hyades.logging.java.LoggingAgentHandler クラスによる処理から 除外することができます。これらの値は、実行時に、それぞれ setFilter() および setLevel() API を使用して、 方針に基づいて設定することができます。

    あるいは、VM 開始前、または java.util.logging.LogManager.readConfiguration() API が呼び出される前に、 以下の項目を JRE_HOME\lib\logging.properties 構成ファイルに追加することができます。
    org.eclipse.hyades.logging.java.LoggingAgentHandler.level = <level>
    org.eclipse.hyades.logging.java.LoggingAgentHandler.filter = org.eclipse.hyades.logging.java.CommonBaseEventFilter
    
       
  6. java.lang.Object および   java.lang.Throwable のカスタマイズ・ロガーを作成する機能
    org.eclipse.hyades.logging.commons パッケージの下にある org.apache.commons.logging.Log インターフェース の実装により、java.lang.Object および java.lang.Throwable を、ロガーと同じ名前でロギング・エージェントに 記録するための、カスタマイズ・ロガーを作成することができます。
    この org.eclipse.hyades.logging.commons.Logger は、 ロガーに書き込まれる java.lang.Object および java.lang.Throwable、またはそのいずれかのログ・メッセージが、 ロガーのロギング・レベルを基に記録できるかどうかをチェックします。 ログ・メッセージがログに記録される場合、java.lang.Object および java.lang.Throwable ログ・メッセージは、 org.eclipse.hyades.internal.logging.core.XmlGenerator を使用して フォーマットされて、ロギング・エージェントに書き込まれます。フォーマットの際、 オブジェクトは org.eclipse.hyades.logging.core.IExternalizableToXml インターフェースを実装するかどうかチェックされます。実装する場合は、パフォーマンス上の理由で、 イントロスペクションの手段により、XML シリアライゼーションの代わりに、 externalizeCanonicalXmlString() API が呼び出されます。 org.eclipse.hyades.logging.commons.Logger クラスを org.apache.commons.logging.LogFactory クラスにブートストラップするには、 VM 開始時に以下のシステム・プロパティーを設定する必要があります。
    -Dorg.apache.commons.logging.Log=org.eclipse.hyades.logging.commons.Logger

予防措置

  1. ストリングのログ・メッセージをログに記録する場合は、 XML フラグメントをメッセージに組み込まないようにしてください。XML フラグメントを ログ・メッセージに組み込むと、XML コンテンツが正規化されて、 ストリング・タグの値属性の値に追加されます。 たとえば、次のようになります。
    <String >logging.util.agent_idref>=>"AGENT_CREATE.LoggingUtilSample
       logger.1045075846.538" >logging.util.MsgLoggerLevel>=>"FINEST"
       >Value>=>"&lt;tag attribute=&quot;value&quot;/&gt;">/>>
  2. com.ibm.etools.logging.util スタンドアロン・ロギング ・ユーティリティーを使用する場合は、このパスをシステムおよび VM クラス・パスの hlcore.jar, hparse.jar, hexl.jar および hexr.jar JAR ファイルに 追加する必要があります。

 

関連概念
共通ベース・イベント・モデル

 

(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved.