本文主要介紹了詳解ssm框架下結合log4j、slf4j打印日志,分享給大家,具體如下:
首先加入log4j和slf4j的jar包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<!-- 日志處理 <!-- slf4j日志包--> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-api</artifactid> <version> 1.7 . 21 </version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version> 1.7 . 21 </version> </dependency> <!-- 引入log4j日志包--> <dependency> <groupid>log4j</groupid> --> <artifactid>log4j</artifactid> <version> 1.2 . 16 </version> </dependency> |
mybatis內置的日志工廠提供日志功能,具體的日志實現有以下幾種工具:
- slf4j
- apache commons logging
- log4j 2
- log4j
- jdk logging
1、具體選擇哪個日志實現工具由mybatis的內置日志工廠確定。它會使用最先找到的(按上文列舉的順序查找)。 如果一個都未找到,日志功能就會被禁用。
不少應用服務器的classpath中已經包含commons logging,如tomcat和webshpere, 所以mybatis會把它作為具體的日志實現。記住這點非常重要。這將意味著,在諸如 websphere的環境中——websphere提供了commons logging的私有實現,你的log4j配置將被忽略。 這種做法不免讓人悲催,mybatis怎么能忽略你的配置呢?事實上,因commons logging已經存 在了,按照優先級順序,log4j自然就被忽略了!不過,如果你的應用部署在一個包含commons logging的環境, 而你又想用其他的日志框架,你可以通過在mybatis的配置文件mybatis-config.xml里面添加一項setting(配置)來選擇一個不同的日志實現。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?xml version= "1.0" encoding= "utf-8" ?> <!doctype configuration public "-//mybatis.org//dtd config 3.0//en" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <!-- 用于輸出日志 log4j:log4j slf4j --> <settings> <setting name= "logimpl" value= "slf4j" /> </settings> <!-- 此文件可以為空文件, 但是必須要有這文件 --> <!-- plugins在配置文件中的位置必須符合要求,否則會報錯,順序如下: properties?, settings?, typealiases?, typehandlers?, objectfactory?,objectwrapperfactory?, plugins?, environments?, databaseidprovider?, mappers? --> <plugins> <!-- com.github.pagehelper為pagehelper類所在包名 --> <plugin interceptor= "com.github.pagehelper.pagehelper" > <!-- 4.0 . 0 以后版本可以不設置該參數 --> <property name= "dialect" value= "mysql" /> <!-- 該參數默認為 false --> <!-- 設置為 true 時,會將rowbounds第一個參數offset當成pagenum頁碼使用 --> <!-- 和startpage中的pagenum效果一樣 --> <property name= "offsetaspagenum" value= "true" /> <!-- 該參數默認為 false --> <!-- 設置為 true 時,使用rowbounds分頁會進行count查詢 --> <property name= "rowboundswithcount" value= "true" /> <!-- 設置為 true 時,如果pagesize= 0 或者rowbounds.limit = 0 就會查詢出全部的結果 --> <!-- (相當于沒有執行分頁查詢,但是返回結果仍然是page類型) --> <property name= "pagesizezero" value= "true" /> <!-- 3.3 . 0 版本可用 - 分頁參數合理化,默認 false 禁用 --> <!-- 啟用合理化時,如果pagenum< 1 會查詢第一頁,如果pagenum>pages會查詢最后一頁 --> <!-- 禁用合理化時,如果pagenum< 1 或pagenum>pages會返回空數據 --> <!-- <property name= "reasonable" value= "false" /> --> <!-- 3.5 . 0 版本可用 - 為了支持startpage(object params)方法 --> <!-- 增加了一個`params`參數來配置參數映射,用于從map或servletrequest中取值 --> <!-- 可以配置pagenum,pagesize,count,pagesizezero,reasonable,orderby,不配置映射的用默認值 --> <!-- 不理解該含義的前提下,不要隨便復制該配置 --> <!-- <property name= "params" value= "pagenum=pagehelperstart;pagesize=pagehelperrows;" /> --> <!-- 支持通過mapper接口參數來傳遞分頁參數 --> <property name= "supportmethodsarguments" value= "false" /> <!-- always總是返回pageinfo類型,check檢查返回類型是否為pageinfo,none返回page --> <property name= "returnpageinfo" value= "none" /> </plugin> </plugins> </configuration> |
logimpl可選的值有:slf4j、log4j、log4j2、jdk_logging、commons_logging、stdout_logging、no_logging 或者是實現了接口org.apache.ibatis.logging.log的類的完全限定類名, 并且這個類的構造函數需要是以一個字符串(string類型)為參數的。 (可以參考org.apache.ibatis.logging.slf4j.slf4jimpl.java的實現)
你根據需要調用如下的某一方法:
1
2
3
4
5
|
org.apache.ibatis.logging.logfactory.useslf4jlogging(); org.apache.ibatis.logging.logfactory.uselog4jlogging(); org.apache.ibatis.logging.logfactory.usejdklogging(); org.apache.ibatis.logging.logfactory.usecommonslogging(); org.apache.ibatis.logging.logfactory.usestdoutlogging(); |
如果的確需要調用以上的某個方法,請在其他所有mybatis方法之前調用它。另外,只有在相應日志實現中存在 的前提下,調用對應的方法才是有意義的,否則mybatis一概忽略。如你環境中并不存在log4j,你卻調用了 相應的方法,mybatis就會忽略這一調用,代之默認的查找順序查找日志實現。
2、配置web.xml
1
2
3
4
5
6
7
8
|
<!-- 加載log4j --> <context-param> <param-name>log4jconfiglocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <listener> <listener- class >org.springframework.web.util.log4jconfiglistener</listener- class > </listener> |
3、只要在應用的classpath中創建一個名稱為log4j.properties的文件, 文件的具體內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
log4j.rootlogger=info,console,dailyfile # todo 發布到阿里云記得添加,另外控制臺不輸出(只輸出warn或者error信息) #info,console,dailyfile log4j.logger.org.mybatis =debug log4j.logger.com.itzixi.mapper=debug log4j.appender.console=org.apache.log4j.consoleappender log4j.appender.console.encoding=utf- 8 log4j.appender.console.layout=org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern=%-d{yyyy-mm-dd hh:mm:ss,sss} [%t] [%l] - [%p] %m%n #mybatis顯示sql語句日志配置 #log4j.logger.org.mybatis=debug #log4j.logger.com.itzixi.mapper=debug # 定期滾動日志文件,每天都會生成日志 log4j.appender.dailyfile=org.apache.log4j.dailyrollingfileappender log4j.appender.dailyfile.encoding=utf- 8 log4j.appender.dailyfile.threshold=info # todo 本地日志地址,正式環境請務必切換為阿里云地址 #log4j.appender.dailyfile.file=c:/logs/itzixi-web/log.log4j log4j.appender.dailyfile.file=/itzixi-disk1/logs/itzixi-web/log.log4j log4j.appender.dailyfile.datepattern= '.' yyyy-mm-dd log4j.appender.dailyfile.layout=org.apache.log4j.patternlayout log4j.appender.dailyfile.layout.conversionpattern=%-d{yyyy-mm-dd hh:mm:ss,sss} [%t] [%l] - [%p] %m%n ##顯示sql語句部分 #log4j.logger.com.ibatis=debug #log4j.logger.com.ibatis.common.jdbc.simpledatasource=debug #log4j.logger.com.ibatis.common.jdbc.scriptrunner=debug #log4j.logger.com.ibatis.sqlmap.engine.impl.sqlmapclientdelegate=debug #log4j.logger.java.sql.connection=debug #log4j.logger.java.sql.statement=debug #log4j.logger.java.sql.preparedstatement=debug |
如圖當我們在運行進入debug時就有sql語句打印了
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/a8457013/p/7909780.html