Spring3 MyBatis3 日誌配置

//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
相關文章
相關標籤/搜索