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 消息转换为等同于 org.eclipse.hyades.internal.logging.core.XmlGenerator 实现的 XML,但排除主机、进程和代理程序标记。生成的 XML 未格式化,最高嵌套级别设置为 4。格式化时,会检查对象是否实现 org.eclipse.hyades.logging.core.IExternalizableToXml 接口。如果实现的话,则由于性能原因,会通过自省来调用 externalizeCanonicalXmlString() API 以代替 XML 串行化。

    以下输出举例说明日志消息( 字符串“Hello World”(SEVERE 记录级别))的 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
    
     

    或者,可以在运行时分别使用 addHandler()setFormatter() API 使用程序在“记录器”(例如,处理程序)和“处理程序”(例如,格式化程序)上将 org.eclipse.hyades.logging.java14 插件扩展类与 JDK 1.4.0 及以上版本中的现有“Java 记录”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.Objectjava.lang.Throwable 创建定制记录器的功能
    org.eclipse.hyades.logging.commons 包下面的 org.apache.commons.logging.Log 接口的实现使您能够创建定制记录器以便使用记录器的名称将 java.lang.Objectjava.lang.Throwable 记录至“记录代理程序”。
    org.eclipse.hyades.logging.commons.Logger 检查写至记录器的 java.lang.Object 和/或 java.lang.Throwable 日志消息能否根据记录器的记录级别来记录。如果要记录日志消息,则使用 org.eclipse.hyades.internal.logging.core.XmlGenerator 格式化 java.lang.Objectjava.lang.Throwable log 消息并写至“记录代理程序”。格式化时,会检查对象是否实现 org.eclipse.hyades.logging.core. IExternalizableToXml 接口。如果实现的话,则由于性能原因,会通过自省来调用 externalizeCanonicalXmlString() API 以代替 XML 串行化。要将 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 独立记录实用程序,则必须将 hlcore.jar、hparse.jar、hexl.jar 和 hexr.jar JAR 文件的路径添加至系统和 VM 类路径。

 

相关概念
公共基本事件模型

 

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