2015-12-09 92 views
0

我想使用log4j將生成的SQL查詢導出到控制檯。使用Spring 4和Hibernate 4。春季+休眠show_sql不能正常工作

該servlet-context.xml中:

<beans:bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <beans:property name="dataSource" ref="dataSource" /> 
    <beans:property name="configLocation" value="classpath:hibernate.cfg.xml" /> 
    <beans:property name="hibernateProperties"> 
     <beans:props> 
      <beans:prop key="hibernate.show_sql">true</beans:prop> 
     </beans:props> 
    </beans:property> 
</beans:bean> 

<hibernate-configuration> 
<session-factory> 
    <property name="dialect"> 
     org.hibernate.dialect.MySQLDialect 
    </property> 
    <property name="show_sql">true</property> 
    <property name="connection.autocommit">false</property> 
</session-factory> 

當我調用下面的方法,在控制檯中不產生信息來源的hibernate.cfg.xml中:

List<Comment> listComment = (List<Comment>) sessionFactory.getCurrentSession() 
      .createCriteria(Comment.class).list(); 

有何建議?

==============================%=============== =================

我認爲問題出在log4j.xml文件中。順便說一下,我正在使用STS的Spring MVC項目。 Spring 4.3.2 + Hibernate 4.2.5 + Tomcat 8.0 + log4j 1.2.15。

的log4j.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!-- Appenders --> 
<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 - %m%n" /> 
    </layout> 
</appender> 

<!-- Application Loggers --> 
<logger name="com.hersbitcloud.cancercloud"> 
    <level value="info" /> 
</logger> 

<!-- 3rdparty Loggers --> 
<logger name="org.springframework.core"> 
    <level value="info" /> 
</logger> 

<logger name="org.springframework.beans"> 
    <level value="info" /> 
</logger> 

<logger name="org.springframework.context"> 
    <level value="info" /> 
</logger> 

<logger name="org.springframework.web"> 
    <level value="info" /> 
</logger> 

<logger name="org.hibernate"> 
    <level value="info" /> 
</logger> 

<logger name="org.hibernage.SQL"> 
    <level value="debug" /> 
</logger> 

<!-- Root Logger --> 
<root> 
    <priority value="warn" /> 
    <appender-ref ref="console" /> 
</root> 

由Hibernate生成的日誌是:

INFO : org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.4.Final} 
INFO : org.hibernate.Version - HHH000412: Hibernate Core {4.3.5.Final} 
INFO : org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 
INFO : org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist 
INFO : org.hibernate.cfg.Configuration - HHH000044: Configuring from URL: file:/E:/OneDrive/PostDoc/SuperDr/Code/Spring/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/CancerCloud/WEB-INF/classes/hibernate.cfg.xml 
INFO : org.hibernate.cfg.Configuration - HHH000041: Configured SessionFactory: null 
INFO : org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO : org.hibernate.engine.transaction.internal.TransactionFactoryInitiator - HHH000399: Using default transaction strategy (direct JDBC transactions) 
INFO : org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory 
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 2663 ms 

即使「sessionFactory.getCurrentSession ().createCriteria'不會生成任何SQL語句。

有什麼我應該添加到log4j.xml?

+2

你使用任何Log4j配置文件..喜歡一個XML文件,您可以指定_category_和_level_ loggining的? –

+0

@VirajNalawade我沒有使用任何'log4j.properties'文件。我很確定log4j正在工作,因爲我可以使用'logger.info(「Welcome」);'。 –

+1

根據我的知識那裏*必須是*一些log4j.properties或一些配置文件..或者你怎麼知道哪些文件重定向什麼消息顯示在哪個日誌文件..? –

回答

0

我把一切都改變

<logger name="org.hibernate"> 
    <level value="info" /> 
</logger> 
工作

<logger name="org.hibernate"> 
    <level value="all" /> 
</logger> 
+1

你的配置中有一個拼寫錯誤:'org.hibernage.SQL'而不是'org.hibernate.SQL'。這應該設置爲「調試」級別。不需要將org.hibernate級別設置爲「全部」,因爲這將是垃圾郵件。 – Will

-1

高達我所知,這可能是配置,

<session-factory> 

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 

    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 

    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db</property> 

    <property name="hibernate.connection.username">root</property> 

    <property name="hibernate.connection.password">root</property> 

    <property name="hibernate.show_sql">true</property>