MyBatis 通過使用內置的日誌工廠提供日誌功能。 在這裡我們對STDOUT_LOGGING和LOG4J進行學習。 一、STDOUT_LOGGING 1.什麼是STDOUT_LOGGING STDOUT_LOGGING是MyBatis的標準日誌配置。STDOUT_LOGGING的使用無需其他的依賴 ...
MyBatis 通過使用內置的日誌工廠提供日誌功能。
在這裡我們對STDOUT_LOGGING和LOG4J進行學習。
一、STDOUT_LOGGING
1.什麼是STDOUT_LOGGING
STDOUT_LOGGING是MyBatis的標準日誌配置。STDOUT_LOGGING的使用無需其他的依賴,只需要在MyBatis的核心配置文件中進行<settings></settings>標簽的配置即可。
2.STDOUT_LOGGING的具體使用實例
(1)配置myvatis-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> <properties resource="db.properties" /> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <typeAliases> <typeAlias type="com.jms.pojo.User" alias="User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/jms/dao/UserMapper.xml"/> </mappers> </configuration>
關鍵即
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
標簽的配置。
(2)測試並查看列印的信息
我們可以看到,首先打開一個JDBC的連接,建立一個一串數字的連接(個人認為這個連接應該是SqlSession),JDBC的事務自動提交設置的是false,接下來是幾個值:
Preparing:SQL語句
Parameters:傳入的值
Columns:需要查詢的列名
Row:結果
Total:結果的數量
然後是查詢的結果的展示,JDBC的事務自動提交重新設置的為true,關閉JDBC的連接,將一串數字的連接放回池內。
二、log4j
1.什麼是log4j
Log4j是Apache的一個開源項目,通過使用Log4j,我們可以控制日誌信息輸送的目的地是控制台、文件、GUI組件,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
2.配置log4j
(1)導入依賴
<!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
(2)在CLASSPATH下建立一個log4j.properties文件
文件內內容即對log4j的配置,配置內容不固定,按需求填寫,具體格式查閱即可。
以下是我的文件內容:
#將等級為DEBUG的日誌信息輸出到console和file這兩個目的地,console和file的定義在下麵的代碼 log4j.rootLogger=DEBUG,console,file #控制台輸出的相關設置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件輸出的相關設置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/jms.log log4j.appender.file.MaxFileSize=2mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n log4j.appender.file.append=false #日誌輸出級別 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
(3)在MyBatis的核心配置文件mybatis-config.xml中進行log4j的配置
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
(4)運行一下之前的測試類,看一下結果:
首先看控制台:
再看生成的log文件:
其實除了前面多了具體的類,與標準日誌似乎差別不大。
(5)還可以在要輸出的類中加入相關語句
我們就在測試類中加入相關語句,修改測試類如下:
package com.jms.dao; import com.jms.pojo.User; import com.jms.utils.MyBatisUtil; import org.apache.ibatis.session.SqlSession; import org.apache.log4j.Logger; import org.junit.Test; public class UserMapperTest { static Logger logger = Logger.getLogger(UserMapperTest.class); @Test public void test() { logger.info("進入測試"); //利用工具類獲取SqlSession SqlSession sqlSession = MyBatisUtil.getSqlSession(); //利用SqlSession獲取UserMapper介面 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //調用方法 User user = userMapper.getUserbyid(10001); System.out.println(user); sqlSession.close(); logger.info("測試完成"); } }
進行測試,測試結果如下:
控制台:
日誌文件:
很明顯,在開始和結束多了兩句我們自定義等級的日誌信息。
以下是log4j的等級:
級別 | 描述 |
---|---|
ALL | 所有級別包括自定義級別。 |
DEBUG | 調試消息日誌。 |
ERROR | 錯誤消息日誌,應用程式可以繼續運行。 |
FATAL | 嚴重錯誤消息日誌,必須中止運行應用程式。 |
INFO | 信息消息。 |
OFF | 最高可能的排名,旨在關閉日誌記錄。 |
TRACE | 高於DEBUG。 |
WARN | 用於警告消息。 |
標準等級由低到高:ALL <DEBUG<INFO<WARN<ERROR<FATAL<OFF
當logger設置為某一級時,比它等級低的日誌信息就會被過濾掉。
(本文僅作人人學習記錄用,如有紕漏敬請指正)