MyBatis通過內(nèi)部的日志工廠提供日志信息。內(nèi)部的日志工廠委托下列之一的日志工具來具體實(shí)現(xiàn)日志:
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為遂寧等服務(wù)建站,遂寧等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為遂寧企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
具體使用哪個日志工具是由Log Factory在運(yùn)行時決定的。MyBatis log factory把他找到 第一個日志工具作為它的日志實(shí)現(xiàn)(查找的順序就是上面列出的順序)。如果MyBatis一個都沒有找到,那么MyBatis的日志輸出將不可用。
許多環(huán)境把Commons Logging作為應(yīng)用服務(wù)器類路徑的一部分(典型的例子是Tomcat和WebSphere)。在這種環(huán)境中,MyBatis使用Commons Logging作為日志實(shí)現(xiàn)。在像WebSphere這種環(huán)境下,你的Log4j配置將被忽略,因?yàn)樗约禾峁┝薈ommons Logging的實(shí)現(xiàn)。這是非常令人沮喪的,因?yàn)镸yBatis忽略了你的Log4j配置(事實(shí)上,MyBatis忽略你的Log4j配置是因?yàn)樵谶@樣的環(huán)境下它使用Commons Logging)。如果你的應(yīng)用程序運(yùn)行在classpath已經(jīng)包含Commons Logging的環(huán)境下,而你又想用其它的日志實(shí)現(xiàn),這種情況下,你可以在mybatis-config.xml中添加如下配置已選擇一個不同的日志實(shí)現(xiàn):
... ...
logImpl屬性的有效值是SLF4J, LOG4J, LOG4J2, JDK_LOGGING, COMMONS_LOGGING, STDOUT_LOGGING, NO_LOGGING或者是一個實(shí)現(xiàn)了org.apache.ibatis.logging.Log接口并且提供一個字符串作為形參的構(gòu)造方法的的類的完全限定名。
當(dāng)然,你也可以選擇實(shí)現(xiàn)下列方法:
org.apache.ibatis.logging.LogFactory.useSlf4jLogging(); org.apache.ibatis.logging.LogFactory.useLog4JLogging(); org.apache.ibatis.logging.LogFactory.useLog4J2Logging(); org.apache.ibatis.logging.LogFactory.useJdkLogging(); org.apache.ibatis.logging.LogFactory.useCommonsLogging(); org.apache.ibatis.logging.LogFactory.useStdOutLogging();
這些方法只是用于切換請求日志的具體實(shí)現(xiàn),前提是這些實(shí)現(xiàn)在classpath中都是可用的。比如,你選擇Log4j,但是Log4j在運(yùn)行時不可用,那么MyBatis將忽略到Log4j的日志請求,然后按照正常的邏輯重新選擇日志實(shí)現(xiàn)。
SLF4J, Apache Commons Logging, Apache Log4J and the JDK Logging這些API的使用不在本文檔的講解范圍內(nèi),但是下面有一個例子來講解如何使用。如果你想更多的了解這些日志框架,你可以從下列地址得到更多信息:
SLF4J
Apache Commons Logging
Apache Log4j 1.x and 2.x
JDK Logging API
為了查看MyBatis的日志語句,你能夠?qū)⑷罩敬蛟谝粋€包、一個mapper的完全限定類名、一個命名空間或者一個完全限定的語句名。
下面我們將展示怎樣用Log4j來實(shí)現(xiàn)。配置日志是一件很簡單的事情,只需引入一個或多個配置文件(比如:log4j.properties)和一些Jar包(比如:log4j.jar)即可。下面的示例配置就展示了如何使用log4j來作為日志服務(wù),這在第2步。
因?yàn)橐褂肔og4j,所以我們必須確保jar包在我們的應(yīng)用程序中是可用的,為了使用Log4j,你需要添加jar文件到你的應(yīng)用程序classpath中。
配置log4j是很簡單的,假如你希望日志對于下面這個Mapper是可用的:
package org.mybatis.example;public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }
在classpath中創(chuàng)建一個名字叫l(wèi)og4j.properties的文件:
# Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration... log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
上面這段配置將導(dǎo)致log4j報告org.mybatis.example.BlogMapper的詳細(xì)日志和應(yīng)用程序中其它類中ERROR級別的日志。
如果你只想查看特定的語句的日志,而不是整個Mapper文件,那么你只需要這樣配置:
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE
相反,你可能想要記錄所以Mapper的日志,那么你需要這樣配置:
log4j.logger.org.mybatis.example=TRACE
這里有個問題,這樣配置的話中會有大量的結(jié)果集包含在日志中,而事實(shí)上你可能只是想看SQL語句而不是返回的結(jié)果集。出于這樣的考慮,SQL語句的日志級別是DEBUG,而結(jié)果集的日志級別是TRACE,所以萬一你只想看SQL語句而不關(guān)心結(jié)果集的話,你可以將級別設(shè)置誒DEBUG。
log4j.logger.org.mybatis.example=DEBUG
但是,如果你不是用mapper接口,而是用mapper xml文件呢?就像下面這樣:
這種情況下,你可以在命名空間上添加一個logger來記錄整個xml的日志了
log4j.logger.org.mybatis.example.BlogMapper=TRACE
或者是某個特定的SQL語句
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE
是的,正如你看到的那樣,在mapper接口和在mapper xml文件上配置日志是沒有區(qū)別的。
原文:http://www.mybatis.org/mybatis-3/logging.html
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。