1.前言
在項目中編寫Sysem.out.prinltn()的時候,是輸出到控制台的,當項目發布到tomcat之后,是沒有控制台的,不過可以在命令行界面還能看見,但是不容易觀察一些輸出結果。log4j是由apache推出的一個開源免費的日志處理的類庫,不僅僅可以把內容輸出到控制台,還能把內容輸出到文件中。便於觀察結果。
2.使用步驟
- 導入log4j的jar包
- 在src下,新建log4j.properties(路徑和名稱都是固定的,不允許改變。也就是說,src下的log4j.properties文件是log4j默認加載的文件路徑!)
3.log4j配置文件
- 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使用log4j日志!!
下面演示如何在mybatis.xml中開啟log4j:
- 必須保證有log4j的jar包
- 在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配合文件做兩件事情 :
- 將log4j.rootCategory的日志級別設置的比DEBUG高,如下:
log4j.rootCategory=ERROR, CONSOLE, LOGFILE
- 在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.總結
- 命名級別(包級別):
namespace屬性中除了最后一個類名以外的部分。例如namespace=”com.susu.mapper.PeopleMapper”,那么包級別則是com.susu.mapper,此時就需要在log4j.properties文件中:
- 先在總體級別,設置日志級別為ERROR(比debug高),不輸出無用信息
- 再設置某個制定位置級別為DEBUG
- 類級別:就是mapper.xml中namespace屬性的值
- 方法級別:mapper.xml中namespace屬性的值 + 標簽id的屬性值