我有MyBatis的3.3.0和MyBatis的彈簧1.2.3的一個Spring MVC的項目,我想在我的項目配置log4j。而且我沒有使用mybatis-config.xml
設立MyBatis的SQL會話工廠。所以我不能使用以下設置,如何配置Log4j在Spring爲MyBatis的SQL查詢?
<configuration>
<settings>
...
<setting name="logImpl" value="LOG4J"/>
...
</settings>
</configuration>
所以,我在我的
彈簧的context.xml以下配置,
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.sample.model"/>
<property name="mapperLocations" value="classpath*:com/sample/mappers/*.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sample.mappers" />
</bean>
而且配置此的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="java.sql" additivity="false">
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</logger>
<logger name="org.apache.ibatis" additivity="false">
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</logger>
<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>
<root>
<priority value ="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
以上配置不會打印執行的SQL查詢或預準備語句。因此,作爲記錄在mybatis logging頁和this answer,我用log4j.properties代替XML配置,
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.com.sample.mappers=DEBUG
# SqlMap logging configuration.
log4j.logger.org.mybatis.spring=DEBUG
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.org.apache.ibatis.jdbc.ScriptRunner=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
# 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{1} - %m%n
我共記錄從pom.xml中取出過。但是,這似乎也不起作用。
- 如何設置MyBatis打印所有的SQL查詢(PreparedStatements)?
- 如果萬一MyBatis沒有檢測到log4j,有什麼辦法告訴MyBatis使用log4j作爲默認日誌框架而不使用
mybatis-config.xml
?
我應該在哪裏調用org.apache.ibatis.logging.LogFactory.useLog4JLogging(); ?請記住,我沒有(任何一個)xml文件 - 全部配置在註釋中 –
@HaskellFun在mybatis執行之前用任何控制器方法調用它。我在我的控制器方法中顯示主頁屏幕,它在調用mybatis查詢之前。確定您的應用程序中調用的第一個mybatis查詢,並在此之前調用該方法。適用於完全註解配置的應用程序。 – Lucky