1、日誌
1.1、日誌工廠
如果一個數據庫操作,出現了異常,我們需要排錯,日誌就是最好的助手!
曾經:sout,debug
現在:日誌工廠
mybatis內置的設置
logImpl
指定 MyBatis 所用日誌的具體實現,未指定時將自動查找。
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
- LOG4J 掌握
- COMMONS_LOGGING 掌握
在Mybatis中具體使用哪一個日誌實現,在設置中設置!
STDOUT_LOGGING,標準日誌輸出
在confiuration,typeAliases中間添加settings標籤,一定要注意位置
<!--核心配置文件-->
<configuration>
<!--引入外部的配置文件-->
<properties resource="db.properties"></properties>
<!--設置-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--實體類起別名-->
<typeAliases>
<typeAlias type="com.zjx.pojo.User" alias="User"/>
</typeAliases>
<!--環境 可以配置多套-->
<environments default="development">
<environment id="development">
<!--事務管理 默認JDBC-->
<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>
<!--配置mapper-->
<mappers>
<mapper resource="com/zjx/dao/UserMapper.xml"/>
</mappers>
</configuration>
測試
<mapper namespace="com.zjx.dao.UserMapper">
<!--查詢語句-->
<!--id對應接口的名字 等於原來Impl的實現類中的重寫的方法-->
<!--resultType相當於原本實現類方法中的返回值-->
<select id="getUserList" resultType="User">
select * from smybatis.`user`
</select>
</mapper>
@Test
public void getUserList(){
SqlSession sqlSession = null;
try {
//獲得SqlSession對象
sqlSession = MybatisUtils.getSqlSession();
//執行sql
//方式一 getMapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.getUserList();//執行接口裏面的方法
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
輸出結果
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection 打開JDBC連接
Created connection 81009902. 創建Connection
Setting autocommit to false on JDBC Connection 關閉自動提交事務 [com.mysql.jdbc.JDBC4Connection@4d41cee]
==> Preparing: select * from smybatis.`user` SQL
==> Parameters: 參數
<== Columns: id, name, pwd 查詢的列
<== Row: 1, 狂神, 123456 查詢的記錄
<== Row: 2, 張三, 123456 查詢的記錄
<== Row: 3, 李四, 123890 查詢的記錄
<== Row: 4, 李五, 123123 查詢的記錄
<== Total: 4 總記錄數
User{id=1, name='狂神', pwd='123456'}
User{id=2, name='張三', pwd='123456'}
User{id=3, name='李四', pwd='123890'}
User{id=4, name='李五', pwd='123123'}
Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4d41cee] 開啓自動提交
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4d41cee]
Returned connection 81009902 to pool. 把Connection返回池子
1.2、LOG4J
什麼是LOG4J?
-
LOG4J是Apache的一個開源項目,通過LOG4J,我們可以控制日誌信息輸送的目的地是控制檯,文件,GUI組件。
-
我們也可以控制每一條日誌的輸出格式
-
通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程
-
我們可以通過一個配置文件來靈活配置,不需要修改引用的代碼
- 先導入log4j的包
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
- 在resources下創建一個log4j.properties文件
#將等級爲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/kuang.log
log4j.appender.file.MaxFileSize=10mb
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.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
- 配置log4j爲mybatis日誌的實現
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
- Log4J的使用
測試輸出查詢
[org.apache.ibatis.logging.LogFactory]-Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
[org.apache.ibatis.logging.LogFactory]-Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Opening JDBC Connection
[org.apache.ibatis.datasource.pooled.PooledDataSource]-Created connection 1957502751.
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@74ad1f1f]
[com.zjx.dao.UserMapper.getUserList]-==> Preparing: select * from smybatis.`user`
[com.zjx.dao.UserMapper.getUserList]-==> Parameters:
[com.zjx.dao.UserMapper.getUserList]-<== Total: 4
User{id=1, name='狂神', pwd='123456'}
User{id=2, name='張三', pwd='123456'}
User{id=3, name='李四', pwd='123890'}
User{id=4, name='李五', pwd='123123'}
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@74ad1f1f]
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@74ad1f1f]
[org.apache.ibatis.datasource.pooled.PooledDataSource]-Returned connection 1957502751 to pool.
簡單實用
- 在要使用Log4j的類中,導入包,並創建一個全局的靜態變量
- 注意不要導錯包 看好了
//import org.apache.log4j.Logger;
//getLogger(要在哪個類中使用就寫哪一個類);
static Logger logger = Logger.getLogger(UserDaoTest.class);
- 測試
@Test
public void testlog4j(){
//不同級別
//普通級別
logger.info("info:進入了testlog4j方法");
//debug級別
logger.debug("debug:進入了進入了testlog4j方法");
//錯誤級別
logger.error("error:進入了進入了testlog4j方法");
}
[com.zjx.dao.UserDaoTest]-info:進入了testlog4j方法
[com.zjx.dao.UserDaoTest]-debug:進入了進入了testlog4j方法
[com.zjx.dao.UserDaoTest]-error:進入了進入了testlog4j方法
同時剛剛配置文件中輸出的文件也會有
[INFO][20-04-05][com.zjx.dao.UserDaoTest]info:進入了testlog4j方法
[DEBUG][20-04-05][com.zjx.dao.UserDaoTest]debug:進入了進入了testlog4j方法
[ERROR][20-04-05][com.zjx.dao.UserDaoTest]error:進入了進入了testlog4j方法