为什么Log4j试图找到log4j.dtd

时间:2011-02-11 12:24:24

标签: 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.FileInputStream.open(Native Method)

6 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:6)

  

检查 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

答案 2 :(得分:4)

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

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

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

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

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

答案 3 :(得分:2)

好的,我得到了我的问题的答案,事实证明log4j不需要将dtd文件放在你的项目或机器中。

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

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

答案 4 :(得分:2)

对于即将到来的人来说,log4j.dtd已包含在log4j.jar中(至少在1.2.14版本中)。

在{class> 中查找log4j.dtd(请参阅this other question),您不再需要它了。

答案 5 :(得分:0)

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

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

btw是log4j.jar文件中的位置