log4j2 の標準構成ファイルを作成し、それを特殊なケース (テスト環境、モジュールなど) 用に拡張したいと考えています。これにより、代替構成ファイルで繰り返すことなく、メイン構成ファイルを変更できます。
これまでのところ、xml構成の主要な要素を分離するのに最適なxincludeを試しましたが、インクルード後にそれらの要素に何も追加できません。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 では 1 つの「Appenders」要素しか定義できないため、子要素のみを返すインクルードを行う方法が必要です。
私が試してみました
<xi:include href="appenders.xml" xpointer="xpointer(//Appenders/*)"/>
および xpointer を使用する他の組み合わせを使用できますが、xpointer スキームがサポートされていないというエラーが発生します。
要素スキームでこの機能を取得する方法はありますか? これまでのところ、要素の位置を n とする element(/1/n) を使用して特定の要素を含めることしかできませんでした。
log4j2でサポートされているxmlでこの機能を取得する別の方法はありますか(私が信じているApache Xercesパーサーを使用します)?
アップデート:
多くの調査の結果、xerces/log4j2 のネイティブ ソリューションを見つけることができませんでした。私が見つけた2つの利用可能な代替手段は、XPointerスキームインクルードをサポートするサードパーティのプリプロセッサを使用するか、log4j2 XMLConfigurationを拡張/書き換えて複数の構成ファイルをサポートすることです。現時点では、どちらも実行可能なオプションではありません。