【问题标题】:why is Log4j trying to find log4j.dtd为什么 Log4j 试图找到 log4j.dtd
【发布时间】:2011-06-25 12:46:11
【问题描述】:

当我尝试运行我的应用程序(在 Eclipse 中)抱怨 log4j.dtd 时出现异常。如果我使用 log4j 的 xml 配置,我是否应该有一个 dtd 文件?

Caused by: java.io.FileNotFoundException: 

    C:\data\workspace\LDICommon_Trunk\resources\log4j.dtd (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)

【问题讨论】:

  • 能否包含更多堆栈跟踪信息,因为 log4j 通常使用 EntityResolver 可以从类路径(因此从 log4j jar 文件)加载 log4j dtd

标签: java log4j


【解决方案1】:

如果您使用基于 XML 的 log4j,那么是的,您将需要 DTD 文件。将此 DTD 文件复制到您的工作区:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd

确保它与您的 log4j XML 文件位于同一目录中。

【讨论】:

  • 感谢 limc 帮助我找到 log4j.dtd。与问题没有直接关系,但我发现您的回答对我很有帮助。
  • 此链接目前似乎无法使用。你有最新的工作网址吗?
【解决方案2】:

检查你的 log4j.xml 它一定是在寻找 log4j.dtd

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">

您可以使用:

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

source

【讨论】:

    【解决方案3】:

    如果您使用 XML 文件作为 log4j 配置文件,请查看 DOCTYPE 标签,您会发现如下内容:

    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    

    所以你需要那个 DTD 文件,因为它是你的 XML 结构的定义。

    无论如何,您都可以使用属性文件作为配置文件,而不是 XML。

    编辑:我刚刚发现了一个可以帮助您的相关问题:Eclipse: Referencing log4j.dtd in log4j.xml

    【讨论】:

    • 我可以在不定义 dtd 的情况下逃脱吗? (使用xml配置时)
    • 我猜你不能,但你可以尝试删除DOCTYPE标签或只删除SYSTEM "log4j.dtd"部分
    • 在 log4j wiki wiki.apache.org/logging-log4j/Log4jXmlFormat 然后不要提及有关 log4j.dtd 的任何内容,我在其他项目中找不到任何 log4j.dtd。同时删除 . 标记的任何部分都会导致错误
    【解决方案4】:

    到目前为止,log4j.dtd 已包含在 log4j.jar 中(至少在 1.2.14 版中)。

    log4j.dtd 在你的类路径中寻找(参见this other question)你应该不再需要它了。

    【讨论】:

      【解决方案5】:

      好的,我得到了问题的答案,原来 log4j 不需要 dtd 文件位于您的项目或机器中。

      该错误是由于 eclipse 在我启动运行时尝试运行 log4j.xml 文件引起的。 以前 eclipse 用于运行最后一次运行配置,现在它尝试运行任何打开并在编辑器中聚焦的内容。碰巧我的 log4j.xml 配置文件已打开,并且 eclipse 用来运行 xml 文件的任何东西都试图按照配置文件访问 dtd。

      无论如何,非常感谢您的帮助。

      【讨论】:

      • 如果你的 log4j.xml 配置文件打开了怎么回事?我无法理解您回答中的逻辑。你能详细说明一下吗?
      【解决方案6】:

      我在使用 jar 应用程序时遇到了这个问题,最终将 log4j.dtd 放入目录层次结构中,警告/错误消息消失了:

      org/apache/log4j/xml/log4j.dtd

      顺便说一句,这是 log4j.jar 文件中的位置

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多