//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-->log4jjava
不能直接引入log4j jar包,由于即便我不导入slf4j的包,可是spring的maven配置中会依赖commons-logging,这就致使Mybatis会先使用commons-logging.因此仍是老实一点先引入slf4j的包,在定向到log4j吧spring
<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.apache
不要担忧,其实slf4j-log4j12-1.6.4jar包中已经将log4j的logger封装后传给了slf4japp
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