//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