web-dev-qa-db-ja.com

log4j:WARNドキュメントルート要素 "log4j:configuration"、DOCTYPEルート "null"と一致する必要があります

Log4j.xmlをlog4j.xsd(xmlスキーマ)に接続したいと思います。プロジェクトには警告やエラーはありません。しかし、私がそれを始めるとき、私はそのようなコンソール警告を持っています:

log4j:WARN継続可能な構文解析エラー6および列66。

log4j:WARNドキュメントルート要素 "log4j:configuration"は、DOCTYPEルート "null"と一致する必要があります。

log4j:WARN継続可能な構文解析エラー6および列66。

log4j:WARNドキュメントが無効です:文法が見つかりません。

スキーマの場所に問題があると思います。でも、普通に書く方法はわかりません。あなたのアドバイスを期待してください。

私の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>

そして私の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.私の英語でごめんなさい...

10
dmgmyza

このメッセージを生成しているjarは、スキーマで検証された構成ではなく、DTDで検証された構成を確認することを想定しています。

クラスパスを確認してください。この構成には、古すぎるバージョンのフレームワークを使用しています。ディスクに同じ名前のjarのバージョンが複数ある可能性が非常に高く、そのような場合は、問題が発生し、実際には使用したくない非常に古いライブラリが削除されていることがわかります。

5
Jirka Hanika

<xml>要素の直後にlog4j.xml構成ファイルに次の行を追加します。

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

wikiからの完全なlog4j構成例:

<?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>
14
Gernot Krost