在log4cxx配置中多次使用的单个值定义

时间:2014-09-10 15:10:25

标签: xml dtd log4cxx

我有一个log4cxx.xml配置文件,它定义了多个滚动文件追加器。

<?xml version="1.0" encoding="UTF-8" ?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
  <appender name="A" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="file" value="file1.log" />
    <param name="MaxFileSize" value="12MB" />
    ...
  </appender>
  ...
  <appender name="G" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="file" value="file7.log" />
    <param name="MaxFileSize" value="12MB" />
    ...
  </appender>
  <!-- Loggers referencing A, B, ..., G -->

我想在文件中有一个位置,我在其中定义了最大文件大小。我知道我可以用$ {MAX_FILE_SIZE}替换12MB并从环境中获取值,但我不想设置环境变量。

似乎以下情况应该有效。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration  [
<!ENTITY maxFileSize "12MB">
]>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
  <appender name="A" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="file" value="file1.log" />
    <param name="MaxFileSize" value="&maxFileSize" />
    ...
  </appender>
  ...

但是,log4cxx: Error parsing file [log4cxx.xml], Internal errorXML parser error code: not well-formed (invalid token) (4)失败了。

我猜错了是我得到了DOCTYPE语句错误,或者log4cxx没有完整的XML解析器而且不期望DOCTYPE。我对DTD没什么经验,所以这两个答案对我来说都是合理的。

有没有办法修复DOCTYPE以使其工作,或者是一种完全不同的方法,可以获得在文件中某个位置指定最大文件大小的预期结果?

1 个答案:

答案 0 :(得分:3)

看起来你刚刚错过了实体引用中的分号。

它应该是这样的:

<param name="MaxFileSize" value="&maxFileSize;" />

doctype声明看起来很好。