Spring Boot 2系列(八):log4jdbc-log4j2集成和使用
通常项目中打印 SQL 执行语句参数位置是被占位符替换的,查询用到的参数并不在 SQL 语句中而是额外显示,也无法看到 SQL 的执行结果。
可以使用Log4jdbc-log4j2
神器,在打印中直接看到完整的 SQL 语句,并格式化打印出执行结果。
Log4jdbc-log4j2是Log4jdbc
的增强版,官网:http://log4jdbc.brunorozendo.com/
前提
Spring Boot 已配置使用 Log4j2 为日志工具(Spring Boot实践系列(七):log4j2集成和使用。
以下是在log4j2.xml
文件配置的 jdbc 日志级别。
1 | <Loggers> |
引入Log4jdbc-log4j2依赖
1 | <!-- 监听sql执行详情 |
datasource.url
修改数据源
url
地址常规
spring.datasource.url=jdbc:mysql://localhost:3306/sakila?characterEncoding=utf-8
修改后:主是在是前缀使用log4jdbc
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/sakila?characterEncoding=utf-8修改数据源驱动
常规
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
修改后:使用lo4jdbc数据驱动
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
slf4j记录SQL
使用slf4j
来记录SQL日志,输出的日志会更精简。也可以不做此配置,使用log4j2
打印。
在资源根目录resources
下新建一个log4jdbc.log4j2.properties
文件,内容如下:
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
SQL日志示例
select city0_.city_id as city_id1_0_0_, city0_.city as city2_0_0_, city0_.country_id as country_3_0_0_, city0_.last_update as last_upd4_0_0_ from city city0_ where city0_.city_id=200
2018-05-28 00:28:05,518 INFO [n.s.l.l.s.Slf4jSpyLogDelegator->resultSetCollected:610] [http-nio-8080-exec-1]
|———|———|———–|———————-|
|city_id |city |country_id |last_update |
|———|———|———–|———————-|
|[unread] |Hamilton |68 |2006-02-15 04:45:25.0 |
|———|———|———–|———————-|
log4jdbc
log4jdbc 是版本的 jar 包
1 | <!-- jdbc输出完整带参的SQL语句,而不是占位符 --> |
其它参考
Spring Boot 2系列(八):log4jdbc-log4j2集成和使用
http://blog.gxitsky.com/2018/05/27/SpringBoot-08-log4jdbc-log4j2/