log4j2 xsd
在博客文章JAXB和Log4j XML配置文件中 ,我讨论了“与使用JAXB通过Java类处理[Log4j 1.x和Log4j 2.x] XML配置文件相关的细微差别。” 在本文中,我将探讨与通过Log4j 2.x XML Schema文件Log4j-config.xsd
生成的JAXB对象生成Log4j 2.x配置XML相关的另一挑战:它没有完全指定Log4j 2.x组件的配置特点。
使用Log4j 2.x XML配置时 ,首先要做出的重要区别之一是要使用XML的“ 风味 ”(“简洁”或“严格”)。 简洁的格式可能更容易,因为XML元素的名称对应于它们表示的Log4j 2组件,但XSD仅支持严格格式。 这意味着从Log4j 2.x XSD生成的JAXB对象编组的任何XML都必须具有“严格”格式,而不是“简洁”格式。
不幸的是,当前与Log4j 2.x发行版一起提供的XSD( Log4j-config.xsd
)不足以生成Log4j 2支持的完整“严格” XML配置。我在这里通过讨论XSD定义的复杂类型来演示这一点。 “ AppenderType
”,因为它是受支持元素在XSD中缺少其潜在属性规范的最极端情况之一。 从Log4j 2.6.2开始,下面的代码清单显示了Log4j-config.xsd
中AppenderType
的定义。
在Log4j 2.6.2的Log4j-config.xsd
定义的AppenderType
<xs:complexType name="AppenderType">
<xs:sequence>
<xs:element name="Layout" type="LayoutType" minOccurs="0"/>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element name="Filters" type="FiltersType"/>
<xs:element name="Filter" type="FilterType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="fileName" type="xs:string" use="optional"/>
</xs:complexType>
刚刚显示的XSD的摘录告诉我们,以XSD兼容的XML描述的追加器将只能具有三个属性( type
, name
和fileName
)中的一个或多个。 “ type
”属性用于标识其附加器的类型(例如“ File
”,“ RollingFile
”,“ Console
”,“ Socket
”和“ Syslog
”)。 问题在于,每个“附加”类型都具有不同的属性和特性,理想情况下,可以通过此AppenderType
上的属性来描述它们。
Appenders上的Log4j 2.x文档列出了不同类型的附加程序的特征。 例如,此页面指示ConsoleAppender具有七个参数: filter
, layout
, follow
, direct