//org.apache.ibatis.logging.LogFactory;
static {
tryImplementation(new Runnable() {
public void run() {
useSlf4jLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useCommonsLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useLog4JLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useJdkLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useNoLogging();
}
});
}
查看Mybatis源码发现,他日志框架的寻找顺序:slf4j-->commons logging-->log4j
不能直接引入log4j jar包,因为即使我不导入slf4j的包,但是spring的maven配置中会依赖commons-logging,这就导致Mybatis会先使用commons-logging.所以还是老实一点先引入slf4j的包,在定向到log4j吧
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
好了,然后在配置好log4j配置文件就好了
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE log4j:configuration SYSTEM "http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null" debug="null">
<!-- ===================================================================== -->
<!-- appender definitions -->
<!-- ===================================================================== -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" />
</layout>
</appender>
<!-- ===================================================================== -->
<!-- logger definition -->
<!-- ===================================================================== -->
<logger name="com.analysis" additivity="true">
<level value="DEBUG" />
<appender-ref ref="STDOUT" />
</logger>
<!-- ===================================================================== -->
<!-- Root logger -->
<!-- ===================================================================== -->
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>
但是在日志输出时你可能会看到这样一条日志:
DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
不要担心,其实slf4j-log4j12-1.6.4jar包中已经将log4j的logger封装后传给了slf4j
org.apache.log4j.Logger log4jLogger; if(name.equalsIgnoreCase(Logger.ROOT_LOGGER_NAME)) {
log4jLogger = LogManager.getRootLogger();
} else {
log4jLogger = LogManager.getLogger(name);
}
slf4jLogger = new Log4jLoggerAdapter(log4jLogger); loggerMap.put(name, slf4jLogger);
关注第二行红色代码,已将log4jLogger 适配给了 slf4jLogger