MyBatis(三):核心配置文件的重要配置-Log


本文是按照狂神說的教學視頻學習的筆記,強力推薦,教學深入淺出1便就懂!b站搜索狂神說即可

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

 

 

日志工廠

  • 如果一個數據庫操作出現了異常,我們需要排錯,日志就能輸出語句查詢

  • 主配置文件中,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");
    }
​
}
​

 

  • 在我們配置的目錄下找到日志

 

 

觀察日志:開頭的[]就是我們定義的日志級別

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM