【问题标题】:log4j hibernate errorlog4j 休眠错误
【发布时间】:2011-07-26 06:36:14
【问题描述】:

配置休眠时出现此错误

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

这是代码行

Configuration config = new AnnotationConfiguration().configure("HibernatePositionServer.cfg.xml");

这是我的cfg文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <!--<property name="connection.url">jdbc:mysql://[Here i put correct IP:Port]/settings</property>-->
    <!--<property name="connection.url">jdbc:mysql://127.0.0.1:1433/settings</property>-->

    <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
    <property name="connection.username">root</property>
    <property name="connection.password">Programa17</property>

    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="hibernate.c3p0.timeout">300</property>
    <property name="hibernate.c3p0.idle_test_period">150</property>
    <property name="hibernate.c3p0.min_size">1</property>
    <property name="hibernate.c3p0.max_size">1</property>

    <!-- DB schema will be updated if needed -->
    <property name="hibernate.show_sql">true</property>
    <property name="hbm2ddl.auto">update</property>
    <!--<property name="hbm2ddl.auto">update</property>-->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

</session-factory>

【问题讨论】:

    标签: hibernate log4j


    【解决方案1】:

    先问Google,这是最常见的Log4J错误信息之一。简单地说:Log4J(日志和监控框架)从 Hibernate 收到一条日志消息,但不知道如何处理它(在控制台打印,放入文件,忽略...?)

    将名为log4j.xml 的文件放入您的CLASSPATH 根目录(使用maven 时为src/main/resource),内容如下:

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

    【讨论】:

    • 谢谢。我正在使用Eclipse 做一个hibernate 示例。当我将log4j.properties 保存在src 文件夹中时,我没有收到此警告。但是,当我将它保存在src/resources 文件夹下时,我会收到警告。为什么会发生这种情况,如何让 eclipse 引用正确的文件夹?
    • 谢谢!它对 Spring hibernate 帮助很大
    【解决方案2】:

    我遇到了同样的错误。这个错误有两个原因

    1. 您的库中有两个 log4j jar 文件,位于不同的位置。

    2. 属性文件log4j.properties 不在应用程序的默认包中。

    为什么会弹出这个错误是hibernate.config和log4j应该在同一个包里

    【讨论】:

      【解决方案3】:

      我终于明白了我的情况。它也可能帮助那些面临同样问题的 Netbeans 用户,因为我已经失去了好几个月的头发。我的应用程序刚刚停止记录到控制台,所以我无法调试,因为没有显示错误。

      答案“您的库中有两个不同位置的 log4j jar 文件。”是真的。最初,我希望找到 2 个名称为 log4xxx.jar 的文件,当然版本号不同,但根本没有这样的文件。您会看到 Netbeans 预装了 Hibernate 库,当然还有许多其他库。因此,当在 Netbeans 中的休眠应用程序中开发时,您不需要手动添加自己的 Hibernate Jars,除非您当然需要特定版本等,您可以通过右键单击项目将 Hibernate 库添加到您的应用程序 - 属性 - 库 -添加库按钮 。这将在运行时以及在 dist/lib 文件夹中的编译时在后台/类路径中添加许多休眠 Jar,但不在应用程序的 lib 中。在我的情况下,我添加了 Hibernate 库并将生成的 hibernate jar 从 dist/lib 复制到 lib。这是错误发生的,因为我从以前的应用程序中复制了库以包含在我的新应用程序中以供在那里使用。

      所以带回家点,如果在 Netbeans 中,去你的 lib 文件夹,如果你看到像这样的 jars hibernate-commons-annotations-x.x.x.Final.jar,hibernate-core-x.x.x.Final.jar,hibernate-entitymanager-x.x.x.Final.jar,hibernate-jpa-2.0-api-x.x.x.Final.jar,hibernate-tools-x.x.x.CR1.jar 删除它们并检查错误是否解决。

      【讨论】: