我有一个带有mybatis 3.3.0和mybatis-spring 1.2.3的Spring MVC项目,我想在我的项目中配置log4j。而且我没有使用mybatis-config.xml
来设置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 config,
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中删除了common-logging。但这似乎也不起作用。
mybatis-config.xml
?答案 0 :(得分:3)
我找到了解决方案,现在我可以看到所有准备好的语句和所有Mapper界面查询&amp;我的控制台中的参数。在调用任何MyBatis查询之前,在服务器启动后调用此行代码可以正常工作,
@RequestMapping(value = "/servicetest", method = {RequestMethod.GET})
其他登录框架的其他方法是mentioned here。
如果您选择调用其中一种方法,则应在此之前执行此操作 调用任何其他MyBatis方法。此外,这些方法只会切换 如果该实现是,请求所请求的日志实现 在运行时类路径上可用。例如,如果您尝试选择 Log4J日志记录和Log4J在运行时不可用,然后MyBatis会 忽略使用Log4J的请求,并将使用它的常规算法 发现日志记录实现。
我还在我的pom.xml中隐藏了以下两个依赖项
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
一旦我使用<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
方法设置使用log4j作为默认记录器,在控制台中我可以看到MyBatis现在将log4j作为其记录器框架。
useLog4JLogging()