如何为Mybatis配置log4j以打印我的SQL

2022-09-03 13:07:58

我的项目是用SpringMVC + Mybatis + EXTJS4设置的。这是我的配置:

# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL

# Global logging configuration
log4j.rootLogger=DEBUG,stdout


log4j.logger.org.apache.ibatis=DEBUG,stdout
log4j.logger.java.sql=DEBUG,stdout 

#log4j.additivity.com.ibatis = false
#log4j.additivity.java.sql = false

## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

但是它不在控制台中打印SQL,任何人都可以帮助我吗?谢谢


答案 1

Jaradinor的答案可能会奏效。但是,我认为潜在的问题是由于MyBatis LogFactory类是如何实现的。在静态块中,它尝试加载 slf4j,然后加载 commmons-logging,然后加载 log4j。所以,如果你的类路径中有 commons-log,它将使用它。由于您正在使用Spring,因此您可能确实有公共日志记录。

正是由于这样的问题,我搬到了slf4j。用于让 slf4j 调用 log4j。用于将所有 Spring(和其他)共享资源日志记录路由到 slf4j(然后路由到 log4j)。当你这样做的时候,确保你从你的类路径中排除了“真正的”commons-logging jar文件 - 如果你正在使用Maven,也许可以使用一个。slf4j-log4j12jcl-over-slf4j<exclude>


答案 2

我遇到了类似的问题。下面的代码帮助了我(我在mybatis类配置中使用它):

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

可能会导致问题成为类路径中的其他日志记录系统。


推荐