MyBatis學習筆記7、日誌

7、日誌

7.1、日誌工廠

如果一個數據庫操作出現了異常,日誌是很好的排錯工具。

不使用sout和debug,使用日誌工廠排錯

Mybatis 通過使用內置的日誌工廠提供日誌功能。內置日誌工廠將會把日誌工作委託給下面的實現之一:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j 【重要】
  • JDK logging
  • STDOUT_LOGGING 【重要,系統默認的日誌,不其他依賴】

7.1.1、使用自帶的STDOU_LOGGING

可以在設置setting標籤裏選擇使用哪一種實現(4.5節講了setting)。在 mybatis-config.xml 中配置:

<!-- 設置 -->
<settings>
	<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

輸出了更多的內容:

Opening JDBC Connection
Created connection 516875052.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1ecee32c]
==>  Preparing: select * from mybatis.user where id = ? 
==> Parameters: 1(Integer)
<==    Columns: id, name, pwd
<==        Row: 1, dzy, 123456
<==      Total: 1
User{id=1, name='dzy', pwd='123456'}
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1ecee32c]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1ecee32c]
Returned connection 516875052 to pool.

7.1.2、使用LOG4J

使用log4j需要先導包。

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

在 src/main/resource 下創建配置文件 log4j.propert。

配置詳解:https://blog.csdn.net/eagleuniversityeye/article/details/80582140

這裏我們配置得簡單一點

# 輸出debug級別的日誌輸出到控制檯和文件
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/dzy.log
log4j.appender.file.MaxFileSize = 10MB
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern =%d %p [ %c] - %m %n %d

# 日誌輸出級別
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

setting裏設置:使用 LOG4J:

<settings>
	<setting name="logImpl" value="LOG4J"/>
</settings>

然後執行測試用例,有意義的輸出結果如下:

[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Opening JDBC Connection
[org.apache.ibatis.datasource.pooled.PooledDataSource]-Created connection 79290250.
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4b9df8a]
[com.dzy.dao.UserMapper.getUserById]-==>  Preparing: select * from mybatis.user where id = ? 
[com.dzy.dao.UserMapper.getUserById]-==> Parameters: 1(Integer)
[com.dzy.dao.UserMapper.getUserById]-<==      Total: 1
User{id=1, name='dzy', pwd='123456'}
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4b9df8a]
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4b9df8a]
[org.apache.ibatis.datasource.pooled.PooledDataSource]-Returned connection 79290250 to pool.

LOG4J 更詳細一些,可以設置的東西多一些。

7.2、LOG4J簡單使用

首先要導入包:

import org.apache.log4j.Logger;

然後生成日誌對象,參數是當前類的反射對象:

static Logger logger = Logger.getLogger(UserDaoTest.class);

測試三種不同等級的日誌:

@Test
public void testLog4j() {
	logger.info("info: 使用LOG4J");
	logger.debug("debug: 使用LOG4J");
	logger.error("error: 使用LOG4J");
}

學過日誌之後就應該用日誌代替system.out.print,比如查詢的測試用例改成:

@Test
public void TestSelectById() {
	try (SqlSession session = MybatisUtils.getSqlSession()) {
		UserMapper mapper = session.getMapper(UserMapper.class);
		User user = mapper.getUserById(1);
		logger.info(user);  // 用日誌代替輸出
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章