当我尝试运行我的应用程序(在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)
答案 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">
答案 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文件中的位置