为什么Log4j试图找到log4j.dtd

当我尝试运行我的应用程序(在eclipse中)抱怨log4j.dtd时,我遇到exception。 如果我使用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,那么是的,您将需要DTD文件。 将此DTD文件复制到您的工作区: http : //logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd

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

检查你的log4j.xml,它一定要找log4j.dtd

相反,你可以使用:

资源

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

  

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

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

编辑 :我刚刚找到一个可以帮助你的相关问题: Eclipse:在log4j.xml中引用log4j.dtd

对于那些人来说,截至目前, log4j.dtd包含在log4j.jar (至少在1.2.14版本中)。

在你的类路径中查找log4j.dtd (请参阅另一个问题 ),你不再需要它了。

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

该错误是由我在启动运行时尝试运行log4j.xml文件的eclipse引起的。 以前eclipse用于运行最后一次运行配置,现在它尝试运行编辑器中打开和聚焦的任何内容。 事实上我的log4j.xml配置文件已经打开,并且无论eclipse用于运行xml文件,都试图按照配置文件到达dtd。

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

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

组织/阿帕奇/ log4j的/ XML / log4j.dtd

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