xml - log4cxx 配置中多次使用的单一值定义

标签 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:解析文件 [log4cxx.xml] 时出错,内部错误XML 解析器错误代码:格式不正确(无效 token )(4)

我对问题所在的猜测是,要么我的 DOCTYPE 语句错误,要么 log4cxx 没有完整的 XML 解析器并且不需要 DOCTYPE。我对 DTD 缺乏经验,因此这两个答案对我来说都是合理的。

是否有一种方法可以修复 DOCTYPE 来实现此目的,或者是否有一种完全不同的方法可以获得我想要的结果,即在文件中的一个位置指定最大文件大小?

最佳答案

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

它应该看起来像这样:

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

文档类型声明看起来不错。

关于xml - log4cxx 配置中多次使用的单一值定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768995/

相关文章:

validation - 我如何告诉 libxml-ruby 有关外部实体文件的信息?

c++ - 无法打开文件 [TESTXML.xml]

javascript - Node.js NodeList 到 XML 字符串

xml - 如何在运行时(Android)从 XML 交换 LinearLayouts?

xml - 将 xml 元素导入 powershell 变量

java - (撒克逊 dtd)java.net.SocketException : Unexpected end of file fromserver

python - 使用 Python 和 lxml 针对外部 DTD 验证 XML

Java Soap 客户端太慢

c++ - 将 Log4j CompositeTriggeringPolicy 功能与 log4CXX 结合使用

java - 与库一起使用的不同记录器