Mybatis自定義控制台打印sql的日志工具


調試mybatis源碼時,想要更改日志的的實現工具,首先需要了解其原理。

源碼包里有這部分的解釋,翻譯如下:

Mybatis 的內置日志工廠提供日志功能,內置日志工廠將日志交給以下其中一種工具作代理:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

MyBatis 內置日志工廠基於運行時自省機制選擇合適的日志工具。它會使用第一個查找得到的工具(按上文列舉的順序查找)。如果一個都未找到,日志功能就會被禁用。

不少應用服務器(如 Tomcat 和 WebShpere)的類路徑中已經包含 Commons Logging,所以在這種配置環境下的 MyBatis 會把它作為日志工具,記住這點非常重要。這將意味着,在諸如 WebSphere 的環境中,它提供了 Commons Logging 的私有實現,你的 Log4J 配置將被忽略。MyBatis 將你的 Log4J 配置忽略掉是相當令人郁悶的(事實上,正是因為在這種配置環境下,MyBatis 才會選擇使用 Commons Logging 而不是 Log4J)。如果你的應用部署在一個類路徑已經包含 Commons Logging 的環境中,而你又想使用其它日志工具,你可以通過在 MyBatis 配置文件 mybatis-config.xml 里面添加一項 setting 來選擇別的日志工具。

<configuration>
  <settings>
    ...
    <setting name="logImpl" value="LOG4J"/>
    ...
  </settings>
</configuration>

logImpl 可選的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING,或者是實現了接口 org.apache.ibatis.logging.Log 的,且構造方法是以字符串為參數的類的完全限定名。

需要注意的是:僅當運行時類路徑中存在該日志工具時,調用與該日志工具對應的方法才會生效,否則 MyBatis 一概忽略。如你環境中並不存在 Log4J,你卻調用了相應的方法,MyBatis 就會忽略這一調用,轉而以默認的查找順序查找日志工具。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM