我正在使用iBatis和spring框架。我想记录iBatis在我说
之类时执行的sqlEmployee 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 :(得分: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以及输出结果