2

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

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

例子

附加程序文件:

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

这可行,但我想在包含后添加更多附加程序

    <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 只允许定义一个“Appenders”元素,我需要一种方法来执行仅返回子元素的包含。

我努力了

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

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

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

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

更新:

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

4

0 回答 0