В AFAIK нет «нативного» механизма наследования, но вы можете достичь того же результата, используя сущность для ссылки и включения внешнего фрагмента XML (см. этот набросок ). Если вы просто хотите изменить определенные свойства, аналогичное решение описано здесь . Пример использования внешних сущностей:
Основная конфигурация (log4j.xml):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" [
<!ENTITY appender SYSTEM "appender.xml">
<!ENTITY root SYSTEM "root.xml">
]>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
&appender;
&root;
</log4j:configuration>
appender.xml:
<?xml version="1.0" encoding="UTF-8"?>
<appender name="MyAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd_HH-mm" />
<param name="file" value="logs/MyLogFile.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n" />
</layout>
</appender>
root.xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<priority value="INFO" />
<appender-ref ref="MyAppender" />
</root>
Это работает даже в том случае, если корень и определение appender помещены в один файл без? Xml pi. Таким образом, внешний контент может быть даже плохо сформированным фрагментом XML, в котором отсутствует один корневой элемент. Это позволяет перенести complete log4j config в отдельный внешний файл :
log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"[
<!ENTITY config SYSTEM "log4j-config.txt">
]>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
&config;
</log4j:configuration>
log4j-config.txt:
<appender name="MyAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd_HH-mm" />
<param name="file" value="logs/MyLogFile.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n" />
</layout>
</appender>
<root>
<priority value="INFO" />
<appender-ref ref="MyAppender" />
</root>
Если вам нужно индивидуально и гибко адаптировать конфигурацию log4j, вы можете попробовать объединить файл root.xml с child.xml, используя XSLT или XmlMerge (часть el4j) , чтобы создать Конфигурацию на лету и скормите org.apache.log4j.xml.DOMConfigurator полученным DOM.