iBatis,spring,如何记录执行的sql?

时间:2010-11-02 22:53:54

标签: java spring logging ibatis

我正在使用iBatis和spring框架。我想记录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日志?

4 个答案:

答案 0 :(得分:20)

将以下内容添加到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

答案 1 :(得分:3)

在log4j.xml中添加

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

答案 2 :(得分:3)

如果您使用Log4j作为日志记录框架,则需要将mybatis设置为使用log4j作为其默认日志记录工具。您可以通过在mybatis-config.xml中设置它来完成此操作,

rule "Child of Person over 18"
when
    $person : Person(age > 18)
    $child : from $person.children
then
end

或者如果你没有使用mybatis-config.xml而只是注释,那么你想使用

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

在调用任何其他mybatis方法之前设置默认日志记录实现。 Read More...

log4j.properties

中使用此配置
org.apache.ibatis.logging.LogFactory.useLog4JLogging();

如果您使用的是 log4j.xml 配置,请尝试上述等效内容,

# 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

使用属性文件或xml文件如上所述配置log4j并将其放在类路径中以使其正常工作。

答案 3 :(得分:1)

在log4j中添加此内容

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

这将打印出sql以及输出结果