解決springmvc整合Mybatis的Log4j日志輸出問題
springmvc整合Mybatis的Log4j日志輸出
當(dāng)我們進行web開發(fā)的時候總是看到配置的log4j日志在控制臺無法顯示mybatis的主要是指sql、參數(shù)、結(jié)果,出現(xiàn)這種問題有兩種情況:
第一種情況
下面文檔描述的mybatis本身內(nèi)置很多種日志框架使用,所以如果我們要用具體哪個日志框架,就需要進行相應(yīng)mybatis配置,或者就是按照mybatis本身規(guī)則運行。
問題在這里文檔:http://mybatis.github.io/mybatis-3/zh/logging.html
配置方式:新增文件,有就直接添加mybatis-config.xml
<?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> <settings> <setting name="logImpl" value="LOG4J"/> </settings> </configuration>
再把這個文件添加到:
<!--(主庫)整合相應(yīng)的MyBatis持久層相應(yīng)的插件并注冊相應(yīng)的MyBatis模板 (dataSource1 主庫數(shù)據(jù)源)--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dynamicDataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml"></property><!-- 配置mybatis的日志記錄 --> <property name="mapperLocations" value="classpath*:com/belle/finance/**/**/daomapper/mapper/*Mapper.xml"/> </bean>
這樣就配置好了,使用log4j進行日志記錄不會運行mybatis自身規(guī)則。
第二種情況
就是log4j的日志級別使用錯誤,導(dǎo)致mybatis信息打印不出來;
日志級別
每個Logger都被了一個日志級別(log level),用來控制日志信息的輸出。日志級別從高到低分為:
A:off
最高等級,用于關(guān)閉所有日志記錄。
B:fatal
指出每個嚴重的錯誤事件將會導(dǎo)致應(yīng)用程序的退出。
C:error
指出雖然發(fā)生錯誤事件,但仍然不影響系統(tǒng)的繼續(xù)運行。
D:warm
表明會出現(xiàn)潛在的錯誤情形。
E:info
一般和在粗粒度級別上,強調(diào)應(yīng)用程序的運行全程。
F:debug
一般用于細粒度級別上,對調(diào)試應(yīng)用程序非常有幫助。
G:all
最低等級,用于打開所有日志記錄。
上面這些級別是定義在org.apache.log4j.Level類中。Log4j只建議使用4個級別,優(yōu)先級從高到低分別是error,warn,info和debug。通過使用日志級別,可以控制應(yīng)用程序中相應(yīng)級別日志信息的輸出。例如,如果使用b了info級別,則應(yīng)用程序中所有低于info級別的日志信息(如debug)將不會被打印出來。
根據(jù)上面的log4j的說明,另外根據(jù)mybatis的細粒度得出,mybatis要把log4j的日志至少配置到DEBUG級別,才能顯示出sql日志,如下:
log4j.logger.com.demo.user=DEBUG
Mybatis內(nèi)置的日志工廠提供日志功能,具體的日志實現(xiàn)有以下幾種工具:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
具體選擇哪個日志實現(xiàn)工具由MyBatis的內(nèi)置日志工廠確定。它會使用最先找到的(按上文列舉的順序查找)。 如果一個都未找到,日志功能就會被禁用。
不少應(yīng)用服務(wù)器的classpath中已經(jīng)包含Commons Logging,如Tomcat和WebShpere, 所以MyBatis會把它作為具體的日志實現(xiàn)。記住這點非常重要。
這將意味著,在諸如 WebSphere的環(huán)境中——WebSphere提供了Commons Logging的私有實現(xiàn),你的Log4J配置將被忽略。
這種做法不免讓人悲催,MyBatis怎么能忽略你的配置呢?事實上,因Commons Logging已經(jīng)存 在了,按照優(yōu)先級順序,Log4J自然就被忽略了!
不過,如果你的應(yīng)用部署在一個包含Commons Logging的環(huán)境, 而你又想用其他的日志框架,你可以通過在MyBatis的配置文件mybatis-config.xml里面添加一項setting(配置)來選擇一個不同的日志實現(xiàn)。
Log4j實現(xiàn)日志輸出功能
一、為什么要配置mybtis的logger?
mybatis自己設(shè)計以及實現(xiàn)了org.apache.ibatis.logging.Log接口。
Mybatis為了避免對第三方的日志包存在強依賴,內(nèi)部的Log采用了代理模式。通過配置的方式,代理真實的日志對象. 如果沒有配置log,mybatis會按照以下順序嘗試加載日志輸出類:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
no logging
(沒有日志)
二、如何開啟日志輸出?
2.1 下載log4j的jar包并導(dǎo)入到build path下
2.2 開啟日志輸出的配置
在config.xml文件中的settings元素中配置日志實現(xiàn)類。
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
2.3 編寫一個文件:log4j.properties放在類路徑下面
第一行表示日志輸出的級別的debug級別,Console表示輸出位置是控制臺(可以輸出到文件或數(shù)據(jù)庫,可以是發(fā)郵件)。
log4j.rootLogger=DEBUG,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
2.4 log4j的日志輸出的級別:
DEBUG < INFO < WARN < <ERROR < FATAL
DEBUG
:流經(jīng)系統(tǒng)的詳細信息。最低級別的日志輸出,一般用于開發(fā)階段的調(diào)試。INFO
:一般消息輸出(啟動、關(guān)閉)WARN
:警告輸出ERROR
:錯誤輸出FATAL
:導(dǎo)致應(yīng)用程序提前終止的嚴重錯誤。一般這些信息將立即呈現(xiàn)在狀態(tài)控制臺上。
查看日志輸出
debug基本的輸出可以清楚地看到連接數(shù)據(jù)庫的詳細信息。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺析SpringBoot2底層注解@Conditional@ImportResource
這篇文章主要為大家介紹了SpringBoot2底層注解@Conditional@ImportResource的分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05淺談java 增強型的for循環(huán) for each
下面小編就為大家?guī)硪黄獪\談java 增強型的for循環(huán) for each。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10