您好,登錄后才能下訂單哦!
MyBatis通過內(nèi)部的日志工廠提供日志信息。內(nèi)部的日志工廠委托下列之一的日志工具來具體實(shí)現(xiàn)日志:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
具體使用哪個(gè)日志工具是由Log Factory在運(yùn)行時(shí)決定的。MyBatis log factory把他找到 第一個(gè)日志工具作為它的日志實(shí)現(xiàn)(查找的順序就是上面列出的順序)。如果MyBatis一個(gè)都沒有找到,那么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中添加如下配置已選擇一個(gè)不同的日志實(shí)現(xiàn):
<configuration> <settings> ... <setting name="logImpl" value="LOG4J"/> ... </settings> </configuration>
logImpl屬性的有效值是SLF4J, LOG4J, LOG4J2, JDK_LOGGING, COMMONS_LOGGING, STDOUT_LOGGING, NO_LOGGING或者是一個(gè)實(shí)現(xiàn)了org.apache.ibatis.logging.Log接口并且提供一個(gè)字符串作為形參的構(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();
這些方法只是用于切換請(qǐng)求日志的具體實(shí)現(xiàn),前提是這些實(shí)現(xiàn)在classpath中都是可用的。比如,你選擇Log4j,但是Log4j在運(yùn)行時(shí)不可用,那么MyBatis將忽略到Log4j的日志請(qǐng)求,然后按照正常的邏輯重新選擇日志實(shí)現(xiàn)。
SLF4J, Apache Commons Logging, Apache Log4J and the JDK Logging這些API的使用不在本文檔的講解范圍內(nèi),但是下面有一個(gè)例子來講解如何使用。如果你想更多的了解這些日志框架,你可以從下列地址得到更多信息:
SLF4J
Apache Commons Logging
Apache Log4j 1.x and 2.x
JDK Logging API
為了查看MyBatis的日志語句,你能夠?qū)⑷罩敬蛟谝粋€(gè)包、一個(gè)mapper的完全限定類名、一個(gè)命名空間或者一個(gè)完全限定的語句名。
下面我們將展示怎樣用Log4j來實(shí)現(xiàn)。配置日志是一件很簡(jiǎn)單的事情,只需引入一個(gè)或多個(gè)配置文件(比如:log4j.properties)和一些Jar包(比如:log4j.jar)即可。下面的示例配置就展示了如何使用log4j來作為日志服務(wù),這在第2步。
因?yàn)橐褂肔og4j,所以我們必須確保jar包在我們的應(yīng)用程序中是可用的,為了使用Log4j,你需要添加jar文件到你的應(yīng)用程序classpath中。
配置log4j是很簡(jiǎn)單的,假如你希望日志對(duì)于下面這個(gè)Mapper是可用的:
package org.mybatis.example;public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }
在classpath中創(chuàng)建一個(gè)名字叫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報(bào)告org.mybatis.example.BlogMapper的詳細(xì)日志和應(yīng)用程序中其它類中ERROR級(jí)別的日志。
如果你只想查看特定的語句的日志,而不是整個(gè)Mapper文件,那么你只需要這樣配置:
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE
相反,你可能想要記錄所以Mapper的日志,那么你需要這樣配置:
log4j.logger.org.mybatis.example=TRACE
這里有個(gè)問題,這樣配置的話中會(huì)有大量的結(jié)果集包含在日志中,而事實(shí)上你可能只是想看SQL語句而不是返回的結(jié)果集。出于這樣的考慮,SQL語句的日志級(jí)別是DEBUG,而結(jié)果集的日志級(jí)別是TRACE,所以萬一你只想看SQL語句而不關(guān)心結(jié)果集的話,你可以將級(jí)別設(shè)置誒DEBUG。
log4j.logger.org.mybatis.example=DEBUG
但是,如果你不是用mapper接口,而是用mapper xml文件呢?就像下面這樣:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" " <mapper namespace="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
這種情況下,你可以在命名空間上添加一個(gè)logger來記錄整個(gè)xml的日志了
log4j.logger.org.mybatis.example.BlogMapper=TRACE
或者是某個(gè)特定的SQL語句
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE
是的,正如你看到的那樣,在mapper接口和在mapper xml文件上配置日志是沒有區(qū)別的。
原文:http://www.mybatis.org/mybatis-3/logging.html
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。