xml log4j:WARN 文档根元素“log4j:configuration”,必须匹配 DOCTYPE 根“null”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11146461/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
log4j:WARN Document root element "log4j:configuration", must match DOCTYPE root "null"
提问by dmgmyza
I want to connect my log4j.xml with log4j.xsd (xml schema). Project don't have any warnings or errors. But when I start it, Ihave such console warnings:
我想将我的 log4j.xml 与 log4j.xsd(xml 架构)连接起来。项目没有任何警告或错误。但是当我启动它时,我有这样的控制台警告:
log4j:WARN Continuable parsing error 6 and column 66.
log4j:WARN 可继续解析错误 6 和第 66 列。
log4j:WARN Document root element "log4j:configuration", must match DOCTYPE root "null".
log4j:WARN 文档根元素“log4j:configuration”,必须匹配 DOCTYPE 根“null”。
log4j:WARN Continuable parsing error 6 and column 66.
log4j:WARN 可继续解析错误 6 和第 66 列。
log4j:WARN Document is invalid: no grammar found.
log4j:WARN 文档无效:未找到语法。
I think, problem in schema Location. But I don't know, how to write it normally. Hope for your's advices.
我认为,模式位置问题。但我不知道,如何正常写。希望得到您的建议。
My log4j.xml:
我的 log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
debug="false"
xsi:schemaLocation="http://www.example.org/log4j log4j.xsd ">
<appender name="logFileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:/Codes/HorseRacing/logFile.log"/>
<param name="MaxFileSize" value="1MB"/>
<param name="MaxBackupIndex" value="5"/>
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} [%-5p][%-16.16t][%40.40c] - %m%n"/>
</layout>
</appender>
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="Cp866"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} [%-5p][%-25.25l][%10.10c] - %m%n" />
</layout>
</appender>
<logger name="appLogger">
<level value="INFO"/>
<appender-ref ref="logFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</logger>
</log4j:configuration>
And my log4j.xsd:
还有我的 log4j.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="configuration">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="appender">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="param">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="value" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="layout">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="param">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="value" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="class" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="class" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="logger">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="level">
<xsd:complexType>
<xsd:attribute name="value" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="unbounded" name="appender-ref">
<xsd:complexType>
<xsd:attribute name="ref" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="debug" type="xsd:boolean" />
<xsd:attribute name="schemaLocation" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
<logger name="appLogger">
<level value="INFO"/>
<appender-ref ref="logFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</logger>
</log4j:configuration>
P.S. Sorry for my english...
PS对不起我的英语...
采纳答案by Jirka Hanika
The jar that is producing this message expects to see a DTD validated, not schema validated configuration.
生成此消息的 jar 期望看到 DTD 验证的配置,而不是模式验证的配置。
Check your classpath. You are using a too old version of the framework for this configuration. Very likely you have multiple versions of a jar with the same name on your disk, and such occurences will point you to the problem and to removal of very old libraries that you do not really want to use.
检查您的类路径。您在此配置中使用的框架版本太旧。很可能您的磁盘上有多个同名 jar 版本,此类事件将指出问题并删除您并不真正想使用的非常旧的库。
回答by Gernot
Add the following line to your log4j.xml config file right after the <xml>element:
将以下行添加到您的 log4j.xml 配置文件中,紧跟在该<xml>元素之后:
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Complete log4j Configuration Example from their wiki:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>

