xml - log4j 可以从基本/根元素继承 xml 吗?

标签 xml inheritance log4j

我正在尝试减少 log4j 配置中的重复,并且想知道我是否可以将类似的配置向下推送到 root.xml 文件并在每个子 log4j.xml 文件中继承它?

谢谢!

最佳答案

据我所知,没有“ native ”继承机制,但您可以使用实体来引用和包含外部 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>

附加程序.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>

根文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <priority value="INFO" />
    <appender-ref ref="MyAppender" />
</root>

如果将根定义和附加程序定义都放在一个单个 文件中,而没有 ?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 合并。即时创建配置,并提供 org.apache.log4j.xml.DOMConfigurator生成的 DOM。

关于xml - log4j 可以从基本/根元素继承 xml 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116156/

相关文章:

PHP:如何从 android .apk 文件中获取版本?

css - 对于未继承的属性是否正确的 CSS 继承行为?

tomcat - 符号链接(symbolic link)到 log4j.xml

java - 当我点击 ListView 项目时,应用程序崩溃,而不是打开另一个 Activity

c# - 反序列化需要类型转换?

c# - 从子类中替换父类

javascript - Object.create(parent) 与 Object.create(parent.prototype)

java - log4j 调试在 Jboss 7.1 中不起作用

java - Log4j:为什么在登录提交给 ExecutorService 的 Callable 时缺少日志条目

php - 如何迭代 SimpleXMLElement 对象的 XML 值