Java 为什么Log4j试图找到Log4j.dtd

Java 为什么Log4j试图找到Log4j.dtd,java,log4j,Java,Log4j,当我试图运行我的应用程序(在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.FileInp

当我试图运行我的应用程序(在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)

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

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

所以您需要DTD文件,因为它是XML结构的定义

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


编辑:我刚刚发现了一个相关的问题,可以帮助您:

如果您使用的是基于XML的log4j,那么是的,您将需要DTD文件。将此DTD文件复制到您的工作区:


确保它与log4jxml文件位于同一目录中。

好的,我找到了问题的答案,结果证明log4j不需要dtd文件位于项目或机器中

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


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

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

org/apache/log4j/xml/log4j.dtd


顺便说一句,这是log4j.jar文件中的位置,到目前为止,
log4j.dtd
包含在
log4j.jar
中(至少在版本1.2.14中)

由于
log4j.dtd
是在类路径中查找的(请参阅),所以您不应该再需要它了

检查您的log4j.xml它必须查找log4j.dtd

相反,您可以使用:


您是否可以包含更多的堆栈跟踪,因为log4j通常使用一个EntityResolver,它支持从类路径(从而从log4j jar文件)加载log4j dtd。我可以不定义dtd就离开吗?(在使用xml配置时)我想您不能,但是您可以尝试删除
DOCTYPE
标记,或者只删除
系统“log4j.dtd”
部分在log4j wiki中,然后不要提及log4j.dtd,我在其他项目中找不到任何log4j.dtd。还删除了感谢limc帮助我找到log4j.dtd的任何部分。与这个问题没有直接关系,但我发现你的答案对我很有帮助。这个链接现在似乎不起作用。您是否有最新的工作url?如果您的log4j.xml配置文件已打开,会发生什么问题?我不明白你回答的逻辑。你能详细说明一下吗?