2010-11-02 66 views
13

我使用iBatis的彈簧框架。我要記錄的SQL是iBatis的執行,當我這樣說iBatis的,春天,如何登錄所執行的SQL?

Employee e = (Employee) getSqlMapClientTemplate().queryForObject("emp_sql", emp); 

上面一行將尋找在我iBatis的SQL文件「emp_sql」 ID。然後運行對應於「emp_sql」的查詢。我想記錄這個查詢。

我有以下log4j的XML屬性文件。

<appender name="sqlLogAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="file" value="/disk1/logs/sql.log"/> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.txt'"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%m %n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="LevelMin" value="DEBUG"/> 
    </filter> 
</appender> 

<logger name="log4j.logger.com.ibatis"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 


<logger name="log4j.logger.java.sql.Connection"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 

<logger name="log4j.logger.java.sql.PreparedStatement"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 

我仍然無法獲得ibatis執行的sql。 有什麼不對的配置? 如果我只是說

<appender name="sqlLogAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="file" value="/disk1/logs/sql.log"/> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.txt'"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%m %n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="LevelMin" value="DEBUG"/> 
    </filter> 
</appender> 

<logger name="log4j.logger.java.sql"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 

我一定要使用P6SPY或其他什麼東西?或者有什麼我可以在log4j配置中獲得iBatis sql日誌?

+0

iBatis或MyBatis(版本3)? – AngerClown 2012-08-09 14:45:51

回答

15

以下內容添加到您的log4j的配置(取消註釋你希望看到什麼)。

 
# SqlMap logging configuration. 
#log4j.logger.com.ibatis=DEBUG 
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG 
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG 
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=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 
0

在你的log4j添加此

<logger name="java.sql" additivity="false"> 
    <level value="debug" /> 
    <appender-ref ref="console" /> </logger> 

這將打印出來的sql以及輸出結果

3

添加這在你的log4j.xml

<logger name="com.ibatis" additivity="false"> 
    <level value="debug"/> 
    <appender-ref ref="APPENDER"/> 
</logger> 
2

如果您正在使用的Log4j作爲日誌框架,你需要設置的MyBatis使用log4j的作爲其默認的日誌記錄工具。您可以通過在像這樣的MyBatis-config.xml中設置它做到這一點,

<setting name="logImpl" value="LOG4J"/> 

或者,如果你不使用的MyBatis-config.xml文件,只是註釋,那麼要使用

org.apache.ibatis.logging.LogFactory.useLog4JLogging(); 

在調用任何其他mybatis方法來設置默認的日誌記錄實現之前。 Read More...

使用此配置在您的log4j.properties

# Global logging configuration 
log4j.rootLogger=INFO, stdout 

# MyBatis mapper interfaces logging configuration... 
log4j.logger.com.sample.mappers=DEBUG 

# SqlMap logging configuration. 
log4j.logger.org.mybatis.spring=DEBUG 
log4j.logger.org.apache.ibatis=DEBUG 

# Console output... 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%p] %c - %m%n 

如果您正在使用的log4j.xml配置試試這個相當於上述情況,

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%p] %c{1} - %m%n"/> 
    </layout> 
    </appender> 

    <logger name="org.mybatis.spring" additivity="false"> 
    <level value="debug"/> 
    <appender-ref ref="STDOUT"/> 
    </logger> 

    <logger name="com.sample.mappers"> 
    <level value="debug"/> 
    <appender-ref ref="STDOUT"/> 
    </logger> 

    <!-- Other custom 3rd party logger configs --> 

    <root> 
    <priority value ="debug" /> 
    <appender-ref ref="STDOUT" /> 
    </root> 

</log4j:configuration> 

無論是使用性能文件或xml文件來配置log4j,並將其放置在類路徑中,以使其正常工作。