-
如果一個數據庫操作出現了異常,我們需要排錯,日志就能輸出語句查詢
-
主配置文件中,setting中logImpl 指定 MyBatis 所用日志的具體實現,未指定時將自動查找。
-
以下是日志類型,常用的其實就是LOG4J:
-
SLF4J
-
LOG4J
-
LOG4J2
-
JDK_LOGGING
-
COMMONS_LOGGING
-
STDOUT_LOGGING
-
NO_LOGGING
-
STDOUT_LOGGING日志
-
標准日志工廠,不需要導包就可以使用
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
日志輸出分析(只摘取了重要部分說明):
//初始化StdOutImpl類,其實就是這個STDOUT_LOGGING類 Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. .... //打開JDBC連接 Opening JDBC Connection Created connection 1293680848. Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d1c00d0] //查詢語句 ==> Preparing: select * from mybatis.user t where t.id = ? //輸入參數等信息 ==> Parameters: 2(Integer) <== Columns: id, name, pwd <== Row: 2, RZP1, 123 <== Total: 1 User{id=2, name='RZP1', password='123'} Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d1c00d0] Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d1c00d0] //連接放回連接池 Returned connection 1293680848 to pool.
LOG4J日志
-
Log4j是Apache的一個開源項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制台、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX/Syslog/守護進程等
-
可以控制每一條日志的輸出格式;
-
通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。---意思就是可以分等級輸出:info/Eception/Error/Debug...
-
可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
1.使用log4j需要導入依賴
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
2.在resource文件夾下配置log4j.properties文件,附上狂神教學的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/rzp.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.sq1.PreparedStatement=DEBUG
輸出:
-
觀察看出和STDOUT_LOGGING很類似
[org.apache.ibatis.logging.LogFactory]-Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter. ... [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Opening JDBC Connection [org.apache.ibatis.datasource.pooled.PooledDataSource]-Created connection 1866850137. [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f45df59] [com.rzp.dao.UserMapper.getUserById]-==> Preparing: select * from mybatis.user t where t.id = ? [com.rzp.dao.UserMapper.getUserById]-==> Parameters: 2(Integer) [com.rzp.dao.UserMapper.getUserById]-<== Total: 1 User{id=2, name='RZP1', password='123'} [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f45df59] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f45df59] [org.apache.ibatis.datasource.pooled.PooledDataSource]-Returned connection 1866850137 to pool.
3.自定義log4j日志輸出
-
log4j的優點就是可以自定義輸出的內容,就像System.out.println方法一樣,只是能輸出到日志里,更符合生產環境需求
-
要定義log4j日志輸出,首先需要在需要輸出信息的類里創建logger的靜態對象
public class UserDaoTest { //靜態對象 static Logger logger = Logger.getLogger(UserDaoTest.class); @Test public void testLog4j(){ //就可以當作輸出到日志文件的System.out.pringln方法使用了 //三個方法其實是一樣的,只是輸出到日志后,前面的標識分別是info debug error,方便我們查看 logger.info("info:進入了testLog4j"); logger.debug("debug:進入了tesLog4j"); logger.error("error:進入了tesLog4j"); } }
-
在我們配置的目錄下找到日志
觀察日志:開頭的[]就是我們定義的日志級別