2012-06-21 23 views
8

Chcę połączyć mój log4j.xml z log4j.xsd (schemat xml). Projekt nie ma żadnych ostrzeżeń ani błędów. Ale kiedy go uruchomić, ihave ostrzeżenia takie konsoli:log4j: WARN Element główny dokumentu "log4j: configuration", musi być zgodny z DOCTYPE root "null"

log4j: WARN kontynuację pracy błędu parsowania 6 i kolumny 66.

log4j: WARN dokumentu elementu root "log4j: configuration", musi odpowiadać korzeń DOCTYPE "null".

log4j: OSTRZEGAJ przedłużalny błędu analizy 6 i kolumny 66.

log4j: OSTRZEGAJ dokumentów jest nieprawidłowe: ma gramatyki znalezione.

Myślę, że problem w scenie Lokalizacja. Ale nie wiem, jak napisać to normalnie. Nadzieję na Twoje porady.

Moja 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> 

A moja 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: Przepraszam za mój angielski ...

Odpowiedz

5

Słoik, który generuje tę wiadomość, oczekuje sprawdzenia poprawności DTD, a nie sprawdzania poprawności schematu.

Sprawdź swoją ścieżkę klas. Używasz zbyt starej wersji struktury dla tej konfiguracji. Prawdopodobnie masz wiele wersji słoika o tej samej nazwie na dysku, a takie przypadki wskażą ci problem i usuniesz bardzo stare biblioteki, których naprawdę nie chcesz używać.

+0

Używam log4j-1.2.17.jar co powinno Sprawdzam lub testuję? – dmgmyza

+0

Aż za dużo! Pobrałem 1.2.9 - i zmieniono sprawdzanie poprzez DTD. wszystko w porządku. – dmgmyza

+0

Więc, czy obniżyłeś wersję? –

11

Dodaj następujący wiersz do pliku konfiguracyjnego log4j.xml tuż po elemencie <xml>:

<!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> 
+1

Czy możesz podać dokładną lokalizację, w której powinienem umieścić tę linię? –

+1

Zobacz także [tę odpowiedź] (http://stackoverflow.com/a/10852980/487494) na temat pobierania DTD – JavaJigs