【发布时间】:2011-05-24 20:01:05
【问题描述】:
我正在尝试减少 log4j 配置中的重复,并想知道是否可以将类似的配置推送到 root.xml 文件并在每个子 log4j.xml 文件中继承它?
谢谢!
【问题讨论】:
标签: xml inheritance log4j
我正在尝试减少 log4j 配置中的重复,并想知道是否可以将类似的配置推送到 root.xml 文件并在每个子 log4j.xml 文件中继承它?
谢谢!
【问题讨论】:
标签: xml inheritance log4j
AFAIK 没有“本机”继承机制,但您可以使用实体引用并包含外部 xml 片段来实现相同的结果(请参阅this nabble thread)。如果您只想修改某些属性,here 描述了类似的解决方案。使用外部实体的示例:
主配置(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>
如果根和附加程序定义都放在一个 single 文件中,没有 ?xml pi,它甚至可以工作。因此,外部内容甚至可能是缺少单个根元素的格式错误的 xml 片段。这允许将完整 log4j 配置传输到单个外部文件:
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 配置,您可以尝试使用 XSLT 或 XmlMerge (part of el4j) 将 root.xml 与 child.xml 合并以动态创建配置,并提供 @ 987654324@ 与生成的 DOM。
【讨论】: