Spring Boot 入門之整合 log4jdbc 篇(六)


博客地址:http://www.moonxy.com

一、前言

Spring Data JPA 默認采用 Hibernate 實現。Hibernate 的 showSql 配置只打印 SQL,但並不打印 SQL 參數、執行時間等信息,如果需要這些信息,可以使用第三方工具 log4jdbc 來完成。log4jdbc 是在 jdbc 層的一個日志框架,可以將占位符與參數全部合並在一起顯示,方便直接拷貝 sql 到 PLSQL Developer 等客戶端直接執行,加快調試速度。

二、整合 log4jdbc

2.1 添加依賴

<!-- log4jdbc -->
<dependency>
    <groupId>com.googlecode.log4jdbc</groupId>
    <artifactId>log4jdbc</artifactId>
    <version>1.2</version>
    <scope>runtime</scope>
</dependency>

2.2 修改數據源配置

找到我們的數據源配置文件,比如 appliaction.properties,修改 driver 驅動和 url 數據源地址,如下:

# 修改前
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8 # 修改后
spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8

2.3 修改日志配置文件

如果日志采用的是 logback,則添加以下配置,可按照實際需要修改對應條目的日志等級 level:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="jdbc.connection" additivity="false" level="FATAL">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>
    <logger name="jdbc.resultset" additivity="false" level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>
    <logger name="jdbc.audit" additivity="false" level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>
    <logger name="jdbc.sqlonly" additivity="false" level="DEBUG">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>
    <logger name="jdbc.sqltiming" additivity="false" level="DEBUG">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>
</configuration>

如果日志采用的是 log4j,還需要添加 slf4j 的依賴,比如下載 log4jdbc的jar 包 log4jdbc-1.2.jar 以及依賴的相關 jar 包 log4j-1.2.17.jar、slf4j-api-1.6.0.jar、slf4j-log4j12-1.7.7.jar,並修改 log4j.properties 或 log4j.xml 配置文件,如下:

log4j.xml

<!-- log4j.xml -->
<logger name="jdbc.sqlonly" level="WARN"/>  
<logger name="jdbc.sqltiming" level="INFO"/>  
<logger name="jdbc.resultsettable" level="INFO"/>  
<logger name="jdbc.resultset" level="WARN"/>  
<logger name="jdbc.connection" level="WARN"/>  
<logger name="jdbc.audit" level="WARN"/>

<!-- 根據需要關閉不必要的日志輸出 -->
<logger name="jdbc.connection" level="OFF" />
<logger name="jdbc.audit" level="OFF" />
<logger name="jdbc.resultset" level="OFF" />
<logger name="jdbc.sqlonly" level="OFF" />
<logger name="jdbc.sqltiming" level="INFO" />
<logger name="jdbc.resultsettable" level="INFO"/>

log4j.properties

# 記錄系統執行過的sql語句
#log4j.additivity.jdbc.sqlonly=true
log4j.logger.jdbc.sqlonly=DEBUG,console
# 控制台輸出
log4j.appender.console=org.apache.log4j.ConsoleAppender 
# 控制台輸出格式定義 
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
# 記錄sql執行的時間,可以分析耗時的sql語句
#log4j.additivity.jdbc.sqltiming=true
#log4j.logger.jdbc.sqltiming=INFO,console  
# 記錄除了ResultSet外的所有JDBC調用情況,一般不需要
#log4j.additivity.jdbc.audidt=true
#log4j.logger.jdbc.audit=INFO,console
# 記錄返回結果集信息
#log4j.additivity.jdbc.resultset=true
#log4j.logger.jdbc.resultset=INFO,console
# 記錄數據庫連接和釋放信息,可記錄當前的數據庫連接數,便於診斷連接是否釋放
#log4j.additivity.jdbc.connection=true
#log4j.logger.jdbc.connection=INFO,console

三、測試驗證

2018-02-05 23:15:24.832  INFO 7956 --- [           main] jdbc.sqltiming                           : 
insert into user (create_time, department_id, name) values ('02/05/2018 23:15:24.778', 2, 'Jim')

可以看到日志中顯示了執行的完整的 SQL 語句。


免責聲明!

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



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