如何在MyBatis-3.2.7中使用Log4j2 rc2——MyBatis學習筆記之十九

      前天我上傳了我的MyBatis系列課程(http://edu.51cto.com/course/course_id-1110.html)的第六講,主要內容是如何使用Log4j2(具體版本爲v2.0-rc1)爲MyBatis 3.2.7配置日誌。實際上目前最新的版本是剛剛發佈的v2.0-rc2,我也嘗試過在MyBatis 3.2.7中使用它,但卻報出以下錯誤:

      java.lang.ClassNotFoundException: org.apache.logging.log4j.spi.AbstractLoggerWrapper。

      用好壓打開文件log4j-api-2.0-rc2.jar查看,果然沒有類AbstractLoggerWrapper。遂到其官方網站報告了此問題(https://issues.apache.org/jira/browse/LOG4J2#selectedTab=com.atlassian.jira.jira-projects-plugin:issues-panel),問題編號LOG4J2-700。不久有人回覆我,AbstractLoggerWrapper在rc2中已改名爲ExtendedLoggerWrapper。用好壓打開log4j-api-2.0-rc2.jar,可以看到類ExtendedLoggerWrapper(所在的包不變)。

      接着,在他的提示下,通過查閱MyBatis和Log4j2的官方文檔(MyBatis:http://mybatis.github.io/mybatis-3/logging.html,Log4j2:http://logging.apache.org/log4j/2.x/faq.html),我找到了一種可以在MyBatis 3.2.7下使用Log4j2 rc2的方法,原理是指定MyBatis 3.2.7調用SLF4J的API,但通過SLF4J Binding,把具體的日誌調用導向Log4j2,如下圖紅框所示:

wKioL1O9TFOTvOh2AAFm7d4zohs295.jpg

  (圖片來源:http://logging.apache.org/log4j/2.x/faq.html

      具體步驟如下:

      1、在MyBatis的主配置文件中指定使用SLF4J,即在settings元素中添加如下配置:

<setting name="logImpl" value="SLF4J"/>

      2、在SLF4J的官方網站(http://www.slf4j.org)下載slf4j-1.7.7,把其中的slf4j-api-1.7.7.jar添加到工程中;

      3、把Log4j2 rc2提供的log4j-slf4j-impl-2.0-rc2.jar文件添加到工程中。

      當然,要想使用Log4j2 rc2的話,log4j-api-2.0-rc2.jar和log4j-core-2.0-rc2.jar這兩個文件是必須要添加到工程中的。

      此外,根據上圖介紹,也可以用類似的方法,先指定MyBatis 3.2.7使用Commons Logging API,然後通過Commons Logging Bridge,把最終的日誌調用導向Log4j2,如下圖紅框所示:

 

wKiom1O9TSXQUNkmAAFlGABtW60163.jpg

(圖片來源:http://logging.apache.org/log4j/2.x/faq.html

      具體步驟如下:

      1、在MyBatis的主配置文件中指定使用Commons Logging,即把如上的setting配置修改如下:

<setting name="logImpl" value="COMMONS_LOGGING"/>

      2、工程中本身就有commons-logging-1.1.1.jar文件;

      3、把Log4j2 rc2提供的Commons Logging Bridge,即log4j-jcl-2.0-rc2.jar添加到工程中。

      回到上文幫助我的那個人,他又到MyBatis issue tracker上提交了此問題(編號235):https://github.com/mybatis/mybatis-3/issues/235。如你所見,此問題在他之前已被提出(問題編號剛好是234),並被解決。解決的方法在這裏:https://github.com/mybatis/mybatis-3/commit/28c6f04f63e7fdb6eb7a0ffaf789dc4c157e10c0

      上上官網還是有好處的哦。

      (相關鏈接:MyBatis日誌之Log4j 1.2示例

      猛戳這裏全面系統地學習MyBatis 3

      MyBatis技術交流羣:188972810,或掃描二維碼:

wKioL1SaztmBchKiAADsv4YAWBY259.jpg


 

點擊此處觀看作者的MyBatis 3從入門到提高視頻教程

【MyBatis學習筆記】系列之預備篇一:ant的下載與安裝

【MyBatis學習筆記】系列之預備篇二:ant入門示例

【MyBatis學習筆記】系列之一:MyBatis入門示例

【MyBatis學習筆記】系列之二:MyBatis增刪改示例

【MyBatis學習筆記】系列之三:MyBatis的association示例

【MyBatis學習筆記】系列之四:MyBatis association的兩種形式

【MyBatis學習筆記】系列之五:MyBatis與Spring集成示例

【MyBatis學習筆記】系列之六:MyBatis與Spring集成示例續

【MyBatis學習筆記】系列之七:MyBatis一對多雙向關聯

【MyBatis學習筆記】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis學習筆記】系列之九:MyBatis collection的兩種形式

【MyBatis學習筆記】系列之十:MyBatis日誌之Log4j示例

【MyBatis學習筆記】系列之十一:MyBatis多參數傳遞之註解方式示例

【MyBatis學習筆記】系列之十二:MyBatis多參數傳遞之默認命名方式示例

【MyBatis學習筆記】系列之十三:MyBatis多參數傳遞之Map方式示例

【MyBatis學習筆記】系列之十四:MyBatis中的N+1問題

【MyBatis學習筆記】系列之十五:MyBatis多參數傳遞之混合方式

【MyBatis學習筆記】系列之十六:Spring聲明式事務管理示例

【MyBatis學習筆記】系列之十七:MyBatis多對多保存示例

【MyBatis學習筆記】系列之十八:MyBatis多對多關聯查詢示例

【MyBatis學習筆記】系列之十九:如何在MyBatis-3.2.7中使用Log4j2 rc2

MyBatis中如何通過繼承SqlSessionDaoSupport來編寫DAO(一)

MyBatis中如何通過繼承SqlSessionDaoSupport來編寫DAO(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章