Spring Data Jpa列印Sql詳情(帶sql引數)
這裡使用的是 log4jdbc,yml配置檔案裡的資料來源配置也要做相應的修改
pom檔案引入
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
</dependency>
修改yml配置檔案
spring:
datasource:
url: jdbc:log4jdbc:mysql://xxxxxxxxxxxxxxxxxxxxxx
username: root
password: 123456
driver-class-name: net.sf.log4jdbc.DriverSpy
這裡一共需要改兩個地方,一個是driver-class-name,一個是url,要改成對應的log4j的。
新增配置檔案log4jdbc.log4j2.properties
在專案resources目錄下新建一個log4jdbc.log4j2.properties檔案,內容如下
# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
這個時候已經可以啟動專案檢視效果了,這個時候沒有截圖,沒法展示效果,簡單描述下。
啟動專案後我們能看到對應的完整Sql,包括引數,但是包含了很多我們不想看到的內容。
log4jdbc的log內容基本都包含在audit,resultsettable,connection,sqltiming,sqlonly這幾個包下,所以我們需要對這幾個包的log做一些處理;並且在實際專案中我們也需要對系統的log做一個儲存,這時我們需要新增logback的配置檔案。
新增logback配置
-
logback-base.xml
在resources目錄下新建logback目錄,並在裡面新建logback-base.xml檔案,檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <included> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <jmxConfigurator/> <property name="LOG_FILE" value="/aplog/prod"/> <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑 --> <property name="LOG_HOME" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-./tmp}}/}}"/> <!-- 最大儲存歷史日誌天數 --> <property name="LOG_MAX_HISTORY" value="30"/> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(TRACE_ID: [%X{TRACE_ID}]){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" /> <!-- value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %X{REQ_ID} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>--> <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} TRACE_ID: [%X{TRACE_ID}] ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--<withJansi>true</withJansi>--> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符 --> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <!-- 設定字符集 --> <charset>UTF-8</charset> </encoder> </appender> <!-- 訊息日誌,記錄專案所有訊息記錄 --> <appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 如果指定了file屬性,當天的檔名為file屬性值 --> <file>${LOG_HOME}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名 --> <FileNamePattern>${LOG_HOME}/info.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <maxFileSize>200MB</maxFileSize> <totalSizeCap>8GB</totalSizeCap> </rollingPolicy> <encoder> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符 --> <pattern>${FILE_LOG_PATTERN}</pattern> <!-- 設定字符集 --> <charset>UTF-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <!-- 訊息日誌,記錄專案所有訊息記錄 --> <appender name="warnLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 如果指定了file屬性,當天的檔名為file屬性值 --> <file>${LOG_HOME}/warn.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名 --> <FileNamePattern>${LOG_HOME}/warn.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <maxFileSize>200MB</maxFileSize> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符 --> <pattern>${FILE_LOG_PATTERN}</pattern> <!-- 設定字符集 --> <charset>UTF-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level><!-- 只接收錯誤級別的日誌 --> </filter> </appender> <!-- 錯誤日誌,記錄專案標識的錯誤級別資訊 --> <appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <maxFileSize>100MB</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> <!-- 設定字符集 --> <charset>UTF-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 訊息日誌,記錄專案所有訊息記錄 --> <appender name="debugLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 如果指定了file屬性,當天的檔名為file屬性值 --> <file>${LOG_HOME}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名 --> <FileNamePattern>${LOG_HOME}/debug.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <maxFileSize>400MB</maxFileSize> <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符 --> <pattern>${FILE_LOG_PATTERN}</pattern> <!-- 設定字符集 --> <charset>UTF-8</charset> </encoder> </appender> </included>
這裡配置了四個等級的日誌DEBUG, INFO,ERROR,WARN,包括日誌檔案的格式和控制檯列印的格式。
-
logback各個環境的配置檔案
在建立了logback-base.xml配置檔案後,實際專案中,我們需要在不同的環境列印不同的log,這個時候我們需要在logback-base.xml同目錄下建立對應的配置檔案;例如logback-test.xml,測試環境配置檔案,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true"> <include resource="logback/logback-base.xml"/> <!-- 日誌輸出級別 --> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="errorLog"/> <appender-ref ref="warnLog"/> <appender-ref ref="infoLog"/> <appender-ref ref="debugLog"/> </root> <logger name="jdbc.sqlonly" level="OFF" /> <logger name="jdbc.audit" level="OFF" /> <logger name="jdbc.resultsettable" level="OFF" /> <logger name="jdbc.connection" level="INFO" /> <logger name="jdbc.sqltiming" level="INFO" /> </configuration>
在這裡呢我們在include了base配置的基礎上,新增了另一些配置,就是那幾行logger標籤,對log4jdbc的日誌做了些過濾,只保留了connection和sqltiming包下的log。
-
修改yml配置檔案。
這個時候我們需要在系統yml配置檔案中新增上兩行引用我們剛剛寫的配置檔案。
logging: config: classpath:logback/logback-test.xml
這裡要注意的是,logging是一級,前面不要用tab鍵或者空格。
檢視效果
此時啟動專案檢視效果可以看到效果如下:
日誌檔案中的樣式: