Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > log4j+hibernate ошибка инициализации


Автор: iluvatar 14.10.2008, 12:06
tomcat, hibernate, log4j
среда - NetBeans 6.1

log4j.xml:
Код

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
  
  <appender name="myFileout" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="C:/Program Files/Tomcat6/logs/ROOT/my_debug.txt"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd'.txt'"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%t] %C{2} (%F:%L) - %X{SomeParam} - %m%n"/>
    </layout>
  </appender>
  
  <appender name="hibernateFileout" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="C:/Program Files/Tomcat6/logs/ROOT/my_hibernate.txt"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd'.txt'"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%t] %C (%F:%L) - %m%n"/>
    </layout>
  </appender>
  
  <appender name="commonFileout" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="C:/Program Files/Tomcat6/logs/ROOT/log4j_org.txt"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd'.txt'"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%t] %C (%F:%L) - %m%n"/>
    </layout>
  </appender>
  
  <logger name="ru.iluvatar" additivity="false">
    <level value="all"/>
    <appender-ref ref="myFileout"/>
  </logger>
  
  <logger name="org.hibernate" additivity="false">
    <level value="info"/>
    <appender-ref ref="hibernateFileout"/>
  </logger>
  
  <root>
    <level value="info"/>
    <appender-ref ref="commonFileout"/>
  </root>
</log4j:configuration>


после того как к проекту подключил hibernate выдает вот такую ошибку:
Код

log4j:ERROR Could not parse url [file:/C:/Program%20Files/Tomcat6/webapps/ROOT/WEB-INF/classes/log4j.xml].
gnu.xml.dom.DomEx: The operation violates XML Namespaces.
More Information: xmlns is reserved
Node Name: #document
    at gnu.xml.dom.DomDocument.createAttributeNS(DomDocument.java:589)
    at gnu.xml.dom.DomDocument.createAttribute(DomDocument.java:561)
    at gnu.xml.dom.DomDocument.defaultAttributes(DomDocument.java:456)
    at gnu.xml.dom.DomDocument.createElementNS(DomDocument.java:440)
    at gnu.xml.pipeline.DomConsumer$Handler.startElement(DomConsumer.java:602)
    at gnu.xml.dom.Consumer$Backdoor.startElement(Consumer.java:203)
    at gnu.xml.pipeline.EventFilter.startElement(EventFilter.java:570)
    at gnu.xml.pipeline.ValidationConsumer.startElement(ValidationConsumer.java:1177)
    at gnu.xml.aelfred2.SAXDriver.startElement(SAXDriver.java:836)
    at gnu.xml.aelfred2.XmlParser.parseElement(XmlParser.java:1037)
    at gnu.xml.aelfred2.XmlParser.parseDocument(XmlParser.java:416)
    at gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:167)
    at gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)
    at gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294)
    at gnu.xml.dom.JAXPFactory$JAXPBuilder.parse(JAXPFactory.java:186)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
................
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.


я же указал аппендер hibernateFileout. Что я делаю не так?

Автор: necromancer 14.10.2008, 13:19
ну он же тебе написал:
More Information: xmlns is reserved
может стоит поменять строчку:
xmlns:log4j="http://jakarta.apache.org/log4j/"
на например:
xmlns:log4j="http://jakarta.apache.org/log4j/my/"

хотя конечно корень проблемы может быть далеко не тут.
Лично я пользуюсь не xml конфигурацией log4j

Автор: iluvatar 14.10.2008, 14:26
нет, проблема не в этом. до подключения hibernate он работчал отлично.

Автор: necromancer 14.10.2008, 14:32
как раз может и в этом, хибернат может где либо использовать данный нем спейс =)

Автор: iluvatar 14.10.2008, 14:58
На всякий случай проверил, ошибки те же

Автор: necromancer 14.10.2008, 15:54
http://forums.sun.com/thread.jspa?threadID=663696&tstart=90

Автор: iluvatar 14.10.2008, 16:34
По ссылке предложен только один рабочий вариант - использовать другой xml парсер. Как это заюзать?

Автор: necromancer 14.10.2008, 17:06
а отказатся совсем от конфигурации log4j через xml нет возможности?

Автор: iluvatar 14.10.2008, 20:02
)) Это не наши методы.
Хотя, если уж совсем никак не получится, то придется

Автор: iluvatar 23.10.2008, 11:38
теме ап!

Автор: LSD 23.10.2008, 11:56
Нафига вообще указывать неймспейс при использовании DTD?

Автор: iluvatar 23.10.2008, 12:10
Простите, не понял. Можете показать как должен выглядеть log4j.xml

Сейчас попробовал использовать log4j.properties:
Код

log4j.logger.simple=DEBUG, test
log4j.appender.test=org.apache.log4j.FileAppender
log4j.appender.test.File=test.log
log4j.appender.test.layout=org.apache.log4j.SimpleLayout

log4j.appender.debugfile=org.apache.log4j.FileAppender
log4j.appender.debugfile.file=myproject-debug.log
log4j.appender.debugfile.layout=org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.conversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n

log4j.logger.com.my.app=DEBUG, debugfile


написал листенер:
Код

public class InitServletContextListener implements ServletContextListener {
  private static final Logger logger = Logger.getLogger( InitServletContextListener.class );

  public void contextDestroyed( ServletContextEvent event ) {
  }

  public void contextInitialized( ServletContextEvent event ) {
    String homeDir = event.getServletContext().getRealPath( "/" );
    File propertiesFile = new File( homeDir, "WEB-INF/log4j.properties" );
    PropertyConfigurator.configure( propertiesFile.toString() );
    logger.debug( "my debug Logger" );
  }
}


Если я неправильно напишу конфиг (напр. не укажу аппендер для класса в котором используется Logger), то мне немедленно будет сказано об этом в логах томката. 
Если конфиг правильный, то он просто не создает файлов и игнорирует мои вызовы logger.errror, logger.debug и т.д.

Автор: LSD 24.10.2008, 11:17
Я про xmlns - это объявление неймспейса.

Сделай так:
Код

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true">
...

или даже так:
Код

<?xml version="1.0" encoding="UTF-8" ?>
<log4j:configuration debug="true">
...

Автор: iluvatar 28.10.2008, 11:01
Не спасло.
С такой кофигурацией
Код

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true">

....

пишет

Код

log4j:WARN Parsing warning 2 and column 38
log4j:WARN URI was not reported to parser for entity [dtd]
log4j:WARN Parsing warning 2 and column 38
log4j:WARN missing system ID, using log4j.dtd
log4j:ERROR Could not parse url [file:/C:/Program%20Files/Tomcat6/webapps/myApp/WEB-INF/classes/log4j.xml].
gnu.xml.dom.DomEx: The operation violates XML Namespaces.
More Information: xmlns is reserved
Node Name: #document
    at gnu.xml.dom.DomDocument.createAttributeNS(DomDocument.java:589)
    at gnu.xml.dom.DomDocument.createAttribute(DomDocument.java:561)
    at gnu.xml.dom.DomDocument.defaultAttributes(DomDocument.java:456)
    at gnu.xml.dom.DomDocument.createElementNS(DomDocument.java:440)
    at gnu.xml.pipeline.DomConsumer$Handler.startElement(DomConsumer.java:602)
    at gnu.xml.dom.Consumer$Backdoor.startElement(Consumer.java:203)
    at gnu.xml.pipeline.EventFilter.startElement(EventFilter.java:570)
    at gnu.xml.pipeline.ValidationConsumer.startElement(ValidationConsumer.java:1177)
    at gnu.xml.aelfred2.SAXDriver.startElement(SAXDriver.java:836)
    at gnu.xml.aelfred2.XmlParser.parseElement(XmlParser.java:1037)
    at gnu.xml.aelfred2.XmlParser.parseDocument(XmlParser.java:416)
    at gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:167)
    at gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)




а с таким кофигом
Код

<?xml version="1.0" encoding="UTF-8" ?>
<log4j:configuration debug="true">



падает ошибка

Код

log4j:WARN Parsing warning 2 and column 19
log4j:WARN This document has no DTD, can't be valid
log4j:WARN Continuable parsing error 2 and column 19
log4j:WARN Element type 'log4j:configuration' was not declared
log4j:WARN Continuable parsing error 2 and column 19
log4j:WARN Attribute 'debug' was not declared for element type log4j:configuration
log4j:ERROR Could not parse url [file:/C:/Program%20Files/Tomcat6/webapps/myApp/WEB-INF/classes/log4j.xml].
org.xml.sax.SAXParseException: Undeclared namespace prefix: log4j
    at gnu.xml.pipeline.DomConsumer$Handler.namespaceError(DomConsumer.java:937)
    at gnu.xml.pipeline.DomConsumer$Handler.getNamespace(DomConsumer.java:732)
    at gnu.xml.pipeline.DomConsumer$Handler.startElement(DomConsumer.java:597)
    at gnu.xml.dom.Consumer$Backdoor.startElement(Consumer.java:203)
    at gnu.xml.pipeline.EventFilter.startElement(EventFilter.java:570)
    at gnu.xml.pipeline.ValidationConsumer.startElement(ValidationConsumer.java:1177)
    at gnu.xml.aelfred2.SAXDriver.startElement(SAXDriver.java:836)
    at gnu.xml.aelfred2.XmlParser.parseElement(XmlParser.java:1037)
    at gnu.xml.aelfred2.XmlParser.parseDocument(XmlParser.java:416)


Вывод: второй вариант не подходит вообще. В первом непонятно почему падает ошибка
gnu.xml.dom.DomEx: The operation violates XML Namespaces.
More Information: xmlns is reserved

Автор: ivg 28.10.2008, 11:51
А откуда у вас gnu.xml.** пакеты взялись? Попробуйте сделать так, чтобы загрузчик классов их не находил...

Автор: iluvatar 30.10.2008, 10:56
Спасибо. Действительно, после удаления лишних библиотек, все заработало.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)