MyBatis學習總結(六)---使用log4j2將sql語句執行記錄輸出控制檯和檔案中
阿新 • • 發佈:2018-11-27
在上一篇部落格中我簡單的介紹了在MyBatis中如何使用日誌,並給出了一個在MyBatis中使用log4j的示例。
下面介紹在MyBatis中如何使用log4j2將sql語句執行記錄輸出控制檯和檔案中。
1.示例專案目錄:
2.先匯入log4j2所需要的兩個jar包,如:log4j-api-2.11.1.jar,log4j-core-2.11.1.jar
3.在MyBatis的配置檔案中配置如下資訊:
MyBatis配置檔案中有關Logj2的主要配置資訊:
<settings>
<setting name="logImpl" value="LOG4J2" />
</settings>
MyBatis完整配置檔案示例:
<?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> <!-- 引用並使用db.properties --> <properties resource="db.properties" /> <!-- 使用log4j2輸出日誌 --> <settings> <setting name="logImpl" value="LOG4J2" /> </settings> <!-- environments:資訊配置的是連線資料庫的(資料來源的)一些引數,如使用者名稱,密碼等,MyBatis資料庫操作的session就是根據這些資訊初始化的 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 資料來源配置 --> <dataSource type="POOLED"> <!-- 資料庫驅動 --> <property name="driver" value="${driver}" /> <!-- 資料庫連線URL --> <property name="url" value="${url}" /> <!-- 資料庫使用者名稱和密碼 --> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- mappers:配置的是一個個Mapper檔案,這些檔案來約束資料庫的資訊(Relationship) 和 物件(Object)的資訊對映(Mapper);它負責完成物件和資料庫表的對映,是ORM最具體的配置 --> <mappers> <!-- 配置實體對映檔案 --> <mapper resource="com/mybatisstudy/dao/userMapper.xml" /> </mappers> </configuration>
4.在log4j2的配置檔案中配置如下資訊:
相關的主要配置資訊:
<!-- 將業務dao介面所在的包填寫進去,並用在控制檯和檔案中輸出 -->
<logger name="com.mybatisstudy.dao" level="TRACE" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="MyFile"/>
</logger>
完整的配置資訊示例
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<!-- 配置日誌資訊輸出目的地 -->
<Appenders>
<!-- 輸出到控制檯 -->
<Console name="Console" target="SYSTEM_OUT">
<!--配置日誌資訊的格式 -->
<PatternLayout
pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
"/>
</Console>
<!-- 輸出到檔案,其中有一個append屬性,預設為true,即不清空該檔案原來的資訊,採用新增的方式,若設為false,則會先清空原來的資訊,再新增 -->
<File name="MyFile" fileName="D:/Log4j2.log" append="false">
<PatternLayout>
<!--配置日誌資訊的格式 -->
<pattern>%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</PatternLayout>
</File>
</Appenders>
<!-- 定義logger,只有定義了logger並引入了appender,appender才會有效 -->
<Loggers>
<!-- 將業務dao介面所在的包填寫進去,並用在控制檯和檔案中輸出 -->
<logger name="com.mybatisstudy.dao" level="TRACE"
additivity="false">
<AppenderRef ref="Console" />
<AppenderRef ref="MyFile" />
</logger>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="MyFile" />
</Root>
</Loggers>
</Configuration>
5.輸出示例
控制檯輸出:
2018-11-23 15:49:28,422 main TRACE Using default SystemClock for timestamps.
2018-11-23 15:49:28,423 main DEBUG org.apache.logging.log4j.core.util.SystemClock does not support precise timestamps.
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.addUser - ==> Parameters: 1003(Integer), 小杰(String), 男(String), 20(Integer)
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.addUser - <== Updates: 1
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.updateUser - ==> Preparing: UPDATE user SET age=? ,name=? WHERE id=?
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.updateUser - ==> Parameters: 21(Integer), 小明(String), 1003(Integer)
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.updateUser - <== Updates: 1
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.selectUserById - ==> Preparing: SELECT * FROM user where id = ? ;
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.selectUserById - ==> Parameters: 1001(Integer)
15:49:28 [main] TRACE com.mybatisstudy.dao.IUserDao.selectUserById - <== Columns: id, name, sex, age
15:49:28 [main] TRACE com.mybatisstudy.dao.IUserDao.selectUserById - <== Row: 1001, 小明, 男, 21
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.selectUserById - <== Total: 1
[id:1001,name:小明,sex:男,age:21]
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.deleteUserById - ==> Preparing: DELETE FROM user WHERE id=?;
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.deleteUserById - ==> Parameters: 1003(Integer)
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.deleteUserById - <== Updates: 1
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.selectAllUser - ==> Preparing: SELECT * FROM user ;
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.selectAllUser - ==> Parameters:
15:49:28 [main] TRACE com.mybatisstudy.dao.IUserDao.selectAllUser - <== Columns: id, name, sex, age
15:49:28 [main] TRACE com.mybatisstudy.dao.IUserDao.selectAllUser - <== Row: 1001, 小明, 男, 21
15:49:28 [main] TRACE com.mybatisstudy.dao.IUserDao.selectAllUser - <== Row: 1002, 小華, 男, 18
15:49:28 [main] DEBUG com.mybatisstudy.dao.IUserDao.selectAllUser - <== Total: 2
[[id:1001,name:小明,sex:男,age:21], [id:1002,name:小華,sex:男,age:18]]
日誌檔案中儲存的資訊: