2013-04-26 32 views
7

Tôi đang sử dụng Spring 3.1.1, MyBatis 3.1.1, MySQL 5.0.67. cấu hình Spring của tôi là dưới đây:Làm cách nào để in nhật ký kết quả truy vấn SQL bằng log4j?

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">  
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <property name="validationQuery" value="select 1"/> 
    <property name="testWhileIdle" value="true"/> 
    <property name="timeBetweenEvictionRunsMillis" value="14400000"/>    
    <property name="testOnBorrow" value="false"/>  
</bean> 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="configLocation" value="classpath:mybatis/myBatisConfig.xml"/> 
</bean> 

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
    <constructor-arg ref="sqlSessionFactory"/> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
    p:dataSource-ref="dataSource"/> 

<tx:annotation-driven transaction-manager="transactionManager"/> 

Và log4.properties là dưới đây:

log4j.logger.org.springframework=DEBUG 
log4j.logger.org.apache=DEBUG 
log4j.logger.org.mybatis=DEBUG 

log4j.logger.java.sql=DEBUG 
log4j.logger.java.sql.Connection=DEBUG 
log4j.logger.java.sql.Statement=DEBUG 
log4j.logger.java.sql.PreparedStatement=DEBUG 
log4j.logger.java.sql.ResultSet=DEBUG 

Với những cấu hình, tôi có thể thấy lệnh truy vấn SQL được thực thi và các thông số cho câu hỏi đó nhưng tôi không thể xem nhật ký kết quả truy vấn. Nhật ký của tôi giống như sau:

[org.mybatis.spring.SqlSessionUtils] - Creating a new SqlSession 
[org.mybatis.spring.SqlSessionUtils] - SqlSession    [[email protected]] was not registered for synchronization because synchronization is not active 
[org.springframework.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource 
[org.mybatis.spring.transaction.SpringManagedTransaction] - JDBC Connection  [ProxyConnection[PooledConnection[[email protected]]]] will not be managed by Spring 
[java.sql.Connection] - ooo Using Connection  [ProxyConnection[PooledConnection[[email protected]]]] 
[java.sql.Connection] - ==> Preparing: SELECT col FROM table WHERE col1=? AND col2=? 
[java.sql.PreparedStatement] - ==> Parameters: 93(Integer), 4(Integer) 
[org.mybatis.spring.SqlSessionUtils] - Closing non transactional SqlSession  [[email protected]] 
[org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource 

Có cách nào để in nhật ký bao gồm kết quả truy vấn không?

Trả lời

3

Hai cách:

  • log4j.logger.java.sql.ResultSet = TRACE

Hoặc sử dụng các không gian tên để thiết lập đăng nhập. Đây là phương pháp duy nhất khai thác gỗ trong mybatis 3,2

http://mybatis.github.io/mybatis-3/logging.html

0

gì làm việc cho tôi là:

log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils = TRACE

này in mục như thế này:

... 
TRACE SimpleAsyncTaskExecutor-1 org.springframework.jdbc.core.StatementCreatorUtils - Setting SQL statement parameter value: column index 1, parameter value [12345], value class [java.math.BigDecimal], SQL type 3 
TRACE SimpleAsyncTaskExecutor-1 org.springframework.jdbc.core.StatementCreatorUtils - Setting SQL statement parameter value: column index 2, parameter value [ADDRESS], value class [java.lang.String], SQL type 12 
TRACE SimpleAsyncTaskExecutor-1 org.springframework.jdbc.core.StatementCreatorUtils - Setting SQL statement parameter value: column index 3, parameter value [20130916], value class [java.math.BigDecimal], SQL type 3 
... 

Trong trường hợp của tôi, tôi đang sử dụng chạy truy vấn bên trong ứng dụng JdbcBatchItemWriter trong ứng dụng Spring Batch, wh ich sử dụng params được đặt tên để nó có thể không phải là một giải pháp chung.

Các vấn đề liên quan