Mybatis的logging

使用Mybatis的時(shí)候,有些時(shí)候能輸出(主要是指sql拯刁,參數(shù)脊岳,結(jié)果)日志。有些時(shí)候就不能垛玻。

無法輸出日志的時(shí)候割捅,無論怎么配置log4j,不管是properties的還是xml的帚桩,都不起作用亿驾。

有些時(shí)候,我們沒做什么配置就能輸出日志....

這是一個(gè)讓無數(shù)人煩躁的問題账嚎。其實(shí)解決問題很容易(我過了這么久才解決莫瞬,以前都用攔截器輸出)。

這是一個(gè)普大喜奔的日子郭蕉,讓我們一起來看看如何解決mybatis的日志問題疼邀。

為什么說這個(gè)問題很容易解決呢?因?yàn)閙ybatis的文檔寫的很清楚恳不。

為什么我們都沒找到解決辦法呢檩小?因?yàn)榧词箍催^文檔的人,也未必去看Logging這一節(jié)烟勋。但是這一節(jié)正是解決問題的關(guān)鍵规求。

已經(jīng)等不及的小伙伴們可以直接去這里看文檔:http://mybatis.github.io/mybatis-3/zh/logging.html

提醒最常用的方法不再這個(gè)鏈接中筐付,但是這個(gè)文檔提供了對log4j的詳細(xì)配置。本文下面的內(nèi)容大部分是這個(gè)文檔的Copy阻肿。

Mybatis內(nèi)置的日志工廠提供日志功能瓦戚,具體的日志實(shí)現(xiàn)有以下幾種方式

SLF4J

Apache Commons Logging

Log4j 2

Log4j

JDK logging

具體選擇哪個(gè)日志實(shí)現(xiàn)由MyBatis的內(nèi)置日志工廠確定。它會使用最先找到的(按上文列舉的順序查找)丛塌。如果一個(gè)都未找到较解,日志功能就會被禁用。

不少應(yīng)用服務(wù)器的classpath中已經(jīng)包含Commons Logging赴邻,如TomcatWebShpere印衔,所以MyBatis會把它作為具體的日志實(shí)現(xiàn)

記住這點(diǎn)非常重要姥敛。這意味著奸焙,在諸如WebSphere的環(huán)境中——WebSphere提供了Commons Logging的私有實(shí)現(xiàn),你的Log4J配置將被忽略彤敛。

這種做法不免讓人悲催与帆,MyBatis怎么能忽略你的配置呢?事實(shí)上墨榄,Commons Logging已經(jīng)存在玄糟,按優(yōu)先級Log4J自然就被忽略了!

不過袄秩,如果你的應(yīng)用部署在一個(gè)包含Commons Logging的環(huán)境阵翎,而你又想用其他的日志框架,你可以根據(jù)需要調(diào)用如下的某一方法:

[java]view plaincopy

1.org.apache.ibatis.logging.LogFactory.useSlf4jLogging();

2.org.apache.ibatis.logging.LogFactory.useLog4JLogging();

3.org.apache.ibatis.logging.LogFactory.useJdkLogging();

4.org.apache.ibatis.logging.LogFactory.useCommonsLogging();

5.org.apache.ibatis.logging.LogFactory.useStdOutLogging();

如果的確需要調(diào)用以上的某個(gè)方法播揪,請?jiān)谡{(diào)用所有其他MyBatis方法前調(diào)用它贮喧。另外,只有在相應(yīng)日志實(shí)現(xiàn)存在的前提下猪狈,調(diào)用對應(yīng)的方法才是有意義的箱沦,否則MyBatis一概忽略。如你環(huán)境中并不存在Log4J雇庙,你卻調(diào)用了相應(yīng)的方法谓形,MyBatis就會忽略這一調(diào)用,代之默認(rèn)的查找順序查找日志實(shí)現(xiàn)疆前。

例如使用log4j就需要在調(diào)用mybatis方法前寒跳,先執(zhí)行代碼:

[java]view plaincopy

1.org.apache.ibatis.logging.LogFactory.useLog4JLogging();

上面這是一種解決辦法,但是有些情況你不知道何時(shí)執(zhí)行這個(gè)方法竹椒。

mybatis還提供了另外一種(推薦使用這種)解決方法童太,繼續(xù)看下面。

另一種解決為,在mybatis-config.xml配置文件中:

[html]view plaincopy

1.

2.

3.name="logImpl"value="LOG4J"/>

4.

5.

這里只寫了關(guān)鍵的一部分配置信息书释,在你自己配置的基礎(chǔ)上增加即可翘贮。這樣一來log4j的配置信息就會起作用。

參數(shù)說明:

MybatisLog4j的配置支持:

Logging Configuration

MyBatis可以對包爆惧、類狸页、命名空間和全限定的語句記錄日志。

具體怎么做扯再,視使用的日志框架而定芍耘,這里以Log4J為例。配置日志功能非常簡單:添加幾個(gè)配置文件熄阻,如log4j.properties,再增加個(gè)jar包斋竞,如log4j.jar。下面是具體的例子饺律,共兩個(gè)步驟:

步驟1增加Log4J jar

因?yàn)椴捎肔og4J窃页,要確保在應(yīng)用中對應(yīng)的jar包是可用的。要滿足這一點(diǎn)复濒,只要將jar包添加到應(yīng)用的classpath中即可。Log4J的jar包可以從上方的鏈接下載乒省。

具體而言巧颈,對于web或企業(yè)應(yīng)用,需要將log4j.jar添加到WEB-INF/lib目錄袖扛;對于獨(dú)立應(yīng)用砸泛,可以將它添加到j(luò)vm的-classpath啟動(dòng)參數(shù)中。

步驟2:配置Log4J

配置Log4J比較簡單蛆封,比如需要記錄這個(gè)mapper接口的日志:

[java]view plaincopy

1.packageorg.mybatis.example;

2.publicinterfaceBlogMapper?{

3.@Select("SELECT?*?FROM?blog?WHERE?id?=?#{id}")

4.Blog?selectBlog(intid);

5.}

只要在應(yīng)用的classpath中創(chuàng)建一個(gè)名稱為log4j.properties的文件唇礁,文件的具體內(nèi)容如下:

[plain]view plaincopy

1.#?Global?logging?configuration

2.log4j.rootLogger=ERROR,?stdout

3.#?MyBatis?logging?configuration...

4.log4j.logger.org.mybatis.example.BlogMapper=TRACE

5.#?Console?output...

6.log4j.appender.stdout=org.apache.log4j.ConsoleAppender

7.log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

8.log4j.appender.stdout.layout.ConversionPattern=%5p?[%t]?-?%m%n

添加以上配置后,Log4J就會把org.mybatis.example.BlogMapper的詳細(xì)執(zhí)行日志記錄下來惨篱,對于應(yīng)用中的其它類則僅僅記錄錯(cuò)誤信息盏筐。

也可以將日志從整個(gè)mapper接口級別調(diào)整到到語句級別,從而實(shí)現(xiàn)更細(xì)粒度的控制砸讳。如下配置只記錄selectBlog語句的日志:

[plain]view plaincopy

1.log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

與此相對琢融,可以對一組mapper接口記錄日志,只要對mapper接口所在的包開啟日志功能即可:

[plain]view plaincopy

1.log4j.logger.org.mybatis.example=TRACE

某些查詢可能會返回大量的數(shù)據(jù)簿寂,只想記錄其執(zhí)行的SQL語句該怎么辦漾抬?為此,Mybatis中SQL語句的日志級別被設(shè)為DEBUG(JDK Logging中為FINE)常遂,結(jié)果日志的級別為TRACE(JDK Logging中為FINER)纳令。所以,只要將日志級別調(diào)整為DEBUG即可達(dá)到目的:

[plain]view plaincopy

1.log4j.logger.org.mybatis.example=DEBUG

要記錄日志的是類似下面的mapper文件而不是mapper接口又該怎么呢?

[html]view plaincopy

1.version="1.0"encoding="UTF-8"?>

2.

3.PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"

4."http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5.namespace="org.mybatis.example.BlogMapper">

6.id="selectBlog"resultType="Blog">

7.select?*?from?Blog?whereid=?#{id}

8.

9.

對這個(gè)文件記錄日志,只要對命名空間增加日志記錄功能即可:

[plain]view plaincopy

1.log4j.logger.org.mybatis.example.BlogMapper=TRACE

進(jìn)一步,要記錄具體語句的日志可以這樣做:

[plain]view plaincopy

1.log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

看到了把莺褒,兩種配置沒差別阻荒!

配置文件log4j.properties的余下內(nèi)容是針對日志格式的,這一內(nèi)容已經(jīng)超出本文檔范圍僚楞。關(guān)于Log4J的更多內(nèi)容,可以參考Log4J的網(wǎng)站。不過来累,可以簡單試一下看看,不同的配置會產(chǎn)生什么不一樣的效果窘奏。

??C"????'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘹锁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子着裹,更是在濱河造成了極大的恐慌领猾,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骇扇,死亡現(xiàn)場離奇詭異摔竿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)少孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門继低,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稍走,你說我怎么就攤上這事袁翁。” “怎么了婿脸?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵粱胜,是天一觀的道長。 經(jīng)常有香客問我狐树,道長焙压,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任褪迟,我火速辦了婚禮冗恨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘味赃。我一直安慰自己掀抹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布心俗。 她就那樣靜靜地躺著傲武,像睡著了一般蓉驹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揪利,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天态兴,我揣著相機(jī)與錄音,去河邊找鬼疟位。 笑死瞻润,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甜刻。 我是一名探鬼主播绍撞,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼得院!你這毒婦竟也來了傻铣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祥绞,失蹤者是張志新(化名)和其女友劉穎非洲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜕径,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡两踏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兜喻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缆瓣。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖虹统,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情隧甚,我是刑警寧澤车荔,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站戚扳,受9級特大地震影響忧便,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帽借,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一珠增、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砍艾,春花似錦蒂教、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懊悯。三九已至,卻和暖如春梦皮,著一層夾襖步出監(jiān)牢的瞬間炭分,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工剑肯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捧毛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓让网,卻偏偏與公主長得像呀忧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子寂祥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容