log4j可以从base / root元素继承xml吗? [英] Can log4j inherit xml from a base/root element?

查看:109
本文介绍了log4j可以从base / root元素继承xml吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to reduce duplication in my log4j configuration and wanted to know if I could push similar config down to a root.xml file and inherit from it in each of the child log4j.xml files?

谢谢!

推荐答案

AFAIK没有原生继承机制,但你可以使用实体引用并包含外部xml片段来实现相同的结果(请参阅这个涉嫌线程)。如果您只想修改某些属性,则会描述类似的解决方案此处。使用外部实体的示例:

AFAIK there's no "native" inheritance mechanism, but you may achieve the same result using an entity to reference and include an external xml fragment (see this nabble thread). If you just want to modify certain properties, a similar solution is described here. An Example using external entities:

主配置(log4j.xml):

Main Config (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:

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>

如果root和appender定义都放在单个文件,没有?xml pi。因此,外部内容甚至可能是缺少单个根元素的格式错误的xml片段。这允许将完整 log4j配置转换为单个外部文件

It even works if both the root and the appender definition are placed into a single file, without the ?xml pi. So, the external content may even be an ill-formed xml fragment lacking a single root element. This allows for transferring the complete log4j config into an single external file:

log4j.xml:

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:

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配置,您可以尝试合并带有child.xml的root.xml使用XSLT或 XmlMerge(el4j的一部分) )即时创建配置,并提供 org.apache.log4j.xml.DOMConfigurator 以及生成的DOM。

If you need to adapt the log4j config in an individual and flexible way, you could try and merge the root.xml with the child.xml using XSLT or XmlMerge (part of el4j) to create a config on the fly, and feed the org.apache.log4j.xml.DOMConfigurator with the resulting DOM.

这篇关于log4j可以从base / root元素继承xml吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆