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鍵或者空格。
查看效果
此時啟動項目查看效果可以看到效果如下:
日志文件中的樣式: