使用Xinclude在Log4J2配置中仅包含子元素

时间:2015-07-14 20:38:48

标签: xml log4j2 xerces xinclude xpointer

我想为log4j2编写一个标准配置文件,并针对特殊情况(测试环境,模块等)进行扩展。这将允许我在主配置文件中进行更改,而无需在备用配置文件中重复

到目前为止,我已经尝试过xinclude,它非常适合分离xml配置的主要元素,但是在include之后我无法向这些元素添加任何内容。我尝试过使用xPointer,但只支持元素方案,我不确定是否可以使用元素方案包含元素的所有子元素。

实施例

Appenders文件:

<Appenders>
    <Appender 1 ...>
    <Appender 2 ...>
    <Appender 3...>
<Appenders>

这有效,但我想在include

之后添加更多appender
    <Configuration xmlns:xi="http://www.w3.org/2001/XInclude"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               status="warn" name="XMLConfigTest" packages="com.patternconverters">
    <xi:include href="default-appenders.xml"/>
    <Loggers>
        <root level="ERROR">
            <appender-ref ref="LOG_ASYNC"/>
        </root>
    </Loggers>
</Configuration>

因为log4J2只允许一个&#34; Appenders&#34;要定义的元素我需要一种方法来执行只返回子元素的include。

我试过了

<xi:include href="appenders.xml" xpointer="xpointer(//Appenders/*)"/>

和使用xpointer的其他组合,但得到不支持xpointer方案的错误。

有没有办法通过元素方案获得此功能?到目前为止,我只能使用元素(/ 1 / n)包含一个特定元素,其中n是元素的位置。

是否有其他方法可以在log4j2支持的xml中使用此功能(我相信使用Apache Xerces解析器)?

更新:

经过大量研究后,我无法找到xerces / log4j2的原生解决方案。我发现的两个可用替代方案是使用支持XPointer方案的第三方预处理器包括或扩展/重写log4j2 XMLConfiguration以支持多个配置文件。对我来说,这两者都不是一个可行的选择。

0 个答案:

没有答案