15

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>

PS私の英語でごめんなさい...

4

2 に答える 2

16

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

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

彼らのウィキからの完全な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>
于 2013-02-25T14:00:56.427 に答える
6

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

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

于 2012-06-21T21:01:10.043 に答える