MyBatis與log4j


1.前言

  在項目中編寫Sysem.out.prinltn()的時候,是輸出到控制台的,當項目發布到tomcat之后,是沒有控制台的,不過可以在命令行界面還能看見,但是不容易觀察一些輸出結果。log4j是由apache推出的一個開源免費的日志處理的類庫,不僅僅可以把內容輸出到控制台,還能把內容輸出到文件中。便於觀察結果。

2.使用步驟

  1. 導入log4j的jar包
  2. 在src下,新建log4j.properties(路徑和名稱都是固定的,不允許改變。也就是說,src下的log4j.properties文件是log4j默認加載的文件路徑!)

3.log4j配置文件

  1. log4j輸出級別:Fatal 致命錯誤 --> error 錯誤 --> warn 警告--> info 信息 --> debug調試信息

  在log4j.properties文件的第一行中控制輸出級別

### set log levels ###
log4j.rootCategory=INFO, CONSOLE

  上面的配置中,只有INFO及以上的日志才會打印出來,而debug則不會。info后面還有個console,表示將會打印到console控制台。如果還想輸入到控制文件,則配置應該是

log4j.rootCategory=INFO, CONSOLE, LOGFILE

  在配置文件的第一行控制輸出目的地

  這么寫表示控制台和文件都輸出

4.MyBatis與log4j

  mybatis全局配置文件中是通過 標簽去控制mybatis的全局開關的。從mybatis的api開發文檔中可以看到,如下圖,settings中有很多項配置

  其中最重要的一項配置是如下圖

  即配置mybatis使用log4j日志!!

  下面演示如何在mybatis.xml中開啟log4j:

  1. 必須保證有log4j的jar包
  2. 在src目錄下必須有log4j.properties配置文件

  在mybatis.xml文件中做如下配置:

  注意settings的配置位置是在 標簽上面!
  在配置完之后,再配置上log4j.properties配置文件,並將文件輸出等級設置為DEBUG,如下:

log4j.rootCategory=DEBUG, CONSOLE, LOGFILE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{yyyy-MM-dd HH:mm:ss}  %m %n


log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=log.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %d{yyyy-MM-dd HH:mm:ss}  %m %n

  如此,當使用mybatis執行sql語句,將會輸出如下的調試日志:

  可以看到,上面輸出的調試信息中,最重要的是紅框中的3句話。
  因此,下面需要再對log4j.properties配置文件做相應配置,使得最后只輸出這3行。 此時需要在log4j.properties配合文件做兩件事情

  1. 將log4j.rootCategory的日志級別設置的比DEBUG高,如下:
log4j.rootCategory=ERROR, CONSOLE, LOGFILE
  1. 在log4j.rootCategory制定mapper.xml的日志級別
      Log4j中可以輸出指定內容的日志(控制某個局部內容的日志級別).這句話的意思是,比如當我們只想控制PeopleMapper.xml中如下sql的日志輸出

  那么此時可以在log4j.properties配置文件中,做如下配置:

  如此,也能控制當執行到PeopleMapper.xml中的selAll這個sql時,輸出如下的DEBUG信息。

  但是這種配置方法存在一個弊端,就是使用范圍太窄。假如說PeopleMapper.xml配置文件還有其他sql查詢,如下:

  那么此時還是用上面的log4j.properties配置文件就不合適了,也需要做相應的修改才行:

  可見,log4j.properties添加了一行。
  但是,如果PeopleMapper.xml文件中的sql非常多,那么此時log4j.properties中需要添加的內容也同樣非常多,因此像上面這種 方法級別 的配置是不合理的。這個時候,可以只對log4j.properties修改到 類級別

  如此,無論是調用PeopleMapper.xml中selAll還是selAll2的sql,就都可以打印出他們的debug信息了。
  但是,在實際項目中,肯定還會有其他的mapper.xml配置文件。比如FlowerMapper.xml。
  此時如果log4j.properties依然保持上述配置不變,那么當執行FlowerMapper.xml的sql時,就無法打出它的debug信息了。因此,可以將log4j.properties配置文件設置成包級別的,如下:

  如此,凡是com.susu.mapper包下的mapper.xml文件中的sql,當執行時都會打印出如下的debug信息:

5.總結

  1. 命名級別(包級別): namespace屬性中除了最后一個類名以外的部分。例如namespace=”com.susu.mapper.PeopleMapper”,那么包級別則是com.susu.mapper,此時就需要在log4j.properties文件中:
  • 先在總體級別,設置日志級別為ERROR(比debug高),不輸出無用信息
  • 再設置某個制定位置級別為DEBUG
  1. 類級別:就是mapper.xml中namespace屬性的值
  2. 方法級別:mapper.xml中namespace屬性的值 + 標簽id的屬性值


免責聲明!

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



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