为基于规则的解析器配置解析器组件

解析器的作用是接收抽取程序定界的消息,并构建从字符串值到公共基本事件属性的一组映射。

先决条件:

要配置解析器组件,需要为两个级别的解析器执行配置规则:

全局处理

解析器组件中的全局处理使用一组全局正则表达式规则并将这些规则应用于抽取程序提供的消息结果。

要为解析器组件配置全局处理规则,请执行下列步骤:

  1. 在适配器配置编辑器的左窗格中,展开节点配置 > 上下文实例 > 解析器。右窗格将显示解析器信息。

    显示在右窗格中的解析器配置详细信息

  2. 描述字段中输入解析器的描述。
  3. 如果日志记录包含用于对记录元素进行定界的分隔符标记,则在分隔符标记字段中输入该标记。例如,对于 myapp 应用程序日志记录,元素之间的分隔符标记是两个空格:
    <March 14, 2004 10:25:21 EST>  application:myapp  severity:3  message:WARNING-file style.css missing
    可通过正则表达式 [ ]{2} 指定此分隔符标记。
  4. 如果日志记录包含名值对模式的元素,则您可以在指示标记字段中指定使名称与值相关联的标记。对于上面的示例,在 myapp 日志记录中,指示标记是冒号 :。 

注意:在全局处理阶段解析的值将被修剪掉前导和尾部空格字符。因此,可以编写使用位置值并假定值没有前导和尾部空格字符的替换规则。

属性处理

解析器中的第二个执行阶段应用特定的替换规则以标识要将哪些值指定给公共基本事件属性。

下列公共基本事件属性是必需的:

要获取公共基本事件元素及其相关属性的完整列表,请参阅公共基本事件模型

添加和配置元素及属性

要添加并配置元素:

  1. 在适配器配置编辑器的左窗格中,选择配置 > 上下文实例 > 解析器 > 公共基本事件。右窗格将显示公共基本事件信息。
  2. 要添加元素,请右键单击“公共基本事件”节点并从弹出菜单中选择要添加的元素。这将在“公共基本事件”节点下面创建该元素。
    在下面的示例中,添加了 situation 元素。

    situation 属性显示在右窗格中

  3. 要对刚添加的元素进行配置,请单击该元素。元素属性将显示在右窗格中。
  4. 父代所需的复选框允许您指定此元素是否必须具有有效值才能使父元素有效。在上面的示例中,如果为 situation 元素选取了此复选框,就会通知解析器:公共基本事件对象必须有有效的 situation 元素。在处理期间,如果 situation 元素返回空值,解析器就不处理该公共基本事件对象的任何其它子元素,这是因为它已知道这个公共基本事件对象是无效的,原因是必需的子元素返回了无效的值。
  5. 子代选项复选框允许您指定:当有效子属性或元素返回了有效值时,此元素的处理是否应该停止。例如,考虑上面显示的 situation 元素。它有三个子元素,每个子元素都有它们自己的子树。如果对 situation 元素选取了子代选项复选框,则此元素的解析将在它的第一个子代子树返回有效值时停止。此功能能够大大提高解析带有多个子代元素或属性的元素时的性能。
    注意:categoryName 是 situation 的必需属性,但是,如果其中一个 situation 类型元素返回了值,通用日志适配器就会将 categoryName 设置为适当的值。

要添加并配置属性:

  1. 在适配器配置编辑器的左窗格中,选择配置 > 上下文实例 > 解析器 > 公共基本事件。右窗格将显示公共基本事件信息。
  2. 要添加属性,请右键单击“公共基本事件”节点并从弹出菜单中选择要添加的属性。这将在“公共基本事件”节点下面创建该属性。
    下面的示例显示了在“公共基本事件”节点下面添加的 msg 属性。

    msg 属性显示在右窗格中

  3. 单击该属性以便在右窗格中显示该属性的特性。
  4. 对于上面的示例,如果并非所有日志记录都包含 msg 属性,则可选择将上一个匹配替换用作缺省值复选框。这样将把上一条匹配消息的值赋给 msg 属性。
  5. 如果要为 msg 设置缺省值,则在缺省值字段中输入该值。仅当替换规则不存在或不匹配,并且未选取将上一个匹配替换用作缺省值,或者选取了此复选框但没有已保存的上一匹配值时,才会使用此缺省值。
  6. 属性的父代所需的复选框允许您指定此元素是否必须具有有效值才能使父元素有效。

添加和配置属性替换规则

要对公共基本事件属性添加替换规则,请选择属性 > 添加 > 替换规则。替换规则详细信息将显示在编辑器的右窗格中。

  1. 当日志记录包含由标记定界的名值对时,您可使用位置字段。可通过使用表达式 $h('nameofNameValuePair') 来抽取名值对中的值。
    例如,对于 myapp 应用程序中的日志记录:
    <March 14, 2004 10:25:21 EST>  application:myapp  severity:3  message:WARNING-file style.css missing
    在分隔符标记为 []{2} 并且指示标记为 : 的情况下,用于抽取消息的表达式将是 $h('message')。
    要了解位置字段的其它应用,请参阅位置字段用法主题。
  2. 匹配指定要在记录中搜索的模式。如果指定了“位置”字段,就会搜索记录的某个部分,否则将在整个记录中搜索指定的模式。在此模式中,可使用圆括号来将可在替换字段中引用的某些数据分组到一起。如果该模式与记录中的数据匹配,则将根据“替换”字段来为编写此规则时所针对的公共基本事件属性提供一个值。如果保留匹配字段为空白,则将把该规则视为匹配。
    myapp 日志记录示例中,要与位置字段抽取的消息值匹配,可使用以下正则表达式:
    ^(\w+)-(.*)
    此匹配模式包含两个组。第一组是短划线前面的一组字符。第二组是短划线后面直至“位置”字段规范定义的消息值末尾的所有内容。
  3. 替换字段是作为匹配结果而要赋予公共基本事件属性的值。可以使用表示匹配模式中定义的组的字面值 $1 和 $2 等从匹配的字符串中抽取这些值。
    myapp 日志记录示例中,如果您只想将 warning 值赋给公共基本事件的 msg 属性,则将替换指定为 $2。

    已解析的日志记录示例,结果显示在格式化程序结果视图中

  4. 如果要对通过“位置”、“匹配”和“替换”字段匹配的值运行定制解析逻辑,则可使用替换扩展类。用户类必须实现通用日志适配器接口
    org.eclipse.hyades.logging.adapter.parsers.ISubstitutionExtension
    ,这样通用日志适配器才能执行它。

  5. 可使用时间格式字段来为 creationTime 属性创建替换规则。在此字段中指定 Java 时间模式字符串。输入的模式将用来对通过“位置”、“匹配”和“替换”字段匹配的值进行解析,并使用 java.text.SimpleDateFormat 类来将日期作为长整型值生成。接着,此值用来生成公共基本事件所需的 XML 模式 dateTime 格式中的日期字符串值。
    myapp 日志记录示例中,“时间格式”规则如下所示:

    使用 Java 简单日期格式类的时间格式字段的样本规则

  6. 通过保存适配器配置文件应用所作的更改。
  7. 要测试规则,请单击重新运行适配器 “重新运行适配器”图标的图形 以运行适配器。结果将显示在“格式化程序结果”视图中。提示:您可以指定要从哪个记录号开始查看。使用“重新运行适配器”图标上的下拉菜单并选择从记录开始。这将打开一个对话框,该对话框允许您指定要从哪个记录号开始。
  8. 单击显示下一个事件 “显示下一个事件”图标的图形 图标以查看使用您编写的规则生成的公共基本事件属性。

注意:要了解有关 Java 简单日期格式的更多信息,请参阅 javadoc java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

设置解析器规则完成后,就可以配置适配器配置文件的输出程序组件了。

相关概念
Hyades 通用日志适配器概述
公共基本事件格式规范

相关任务
配置输出程序组件