环境
框架: springboot 2.0
数据库: oracle mysql完全适用
日志: springboot使用默认的logback
log4jdbc介绍
使用java进行数据库操作时最痛苦的莫过于拼接SQL语句。在实际运行时往往需要查看实际生成的SQL语句和实际传入的参数,或许还会有查看SQL执行时间等的需求。
无论原生JDBC、dbutils、mybatis还是hibernate,使用log4j等日志框架可以看到生成的SQL,但是占位符和参数总是分开打印的。实在是不太友好。显示如下的效果:
select * from t_user where age>? and (sex=? or dept_id=?)
log4jdbc能很好的解决上述问题。使用log4jdbc之后的效果如下:
select * from t_user where age>1 and (sex=0 or dept_id='007')
集成log4jdbc
pom.xml中添加log4jdbc依赖
springboot默认使用logback,我们就使用logback作为我们的日志.这样我们在pom.xml中只需要引入log4jdbc依赖即可,不在需要其他日志框架的支持.
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
application.xml中配置log4jdbc
spring.datasource.driver-class-name: net.sf.log4jdbc.DriverSpy
#使用log4jdbc后mysql的url
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8
#使用log4jdbc后oracle的url
#spring.datasource.url: jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driver-class-name: net.sf.log4jdbc.DriverSpy
在上面的配置中spring.datasource.driver-class-name使用net.sf.log4jdbc.DriverSpy.
使用net.sf.log4jdbc.DriverSpy.这个驱动后,不管我们使用的是mysql,oracle还是sql server,他都会帮我们尝试加载.
以下是它支持的可以自动尝试加载的驱动.
Driver Class | Database Type |
---|---|
oracle.jdbc.driver.OracleDriver | Older Oracle Driver |
oracle.jdbc.OracleDriver | Newer Oracle Driver |
com.sybase.jdbc2.jdbc.SybDriver | Sybase |
net.sourceforge.jtds.jdbc.Driver | jTDS SQL Server & Sybase driver |
com.microsoft.jdbc.sqlserver.SQLServerDriver | Microsoft SQL Server 2000 driver |
com.microsoft.sqlserver.jdbc.SQLServerDriver | Microsoft SQL Server 2005 driver |
weblogic.jdbc.sqlserver.SQLServerDriver | Weblogic SQL Server driver |
com.informix.jdbc.IfxDriver | Informix |
org.apache.derby.jdbc.ClientDriver | Apache Derby client/server driver, aka the Java DB |
org.apache.derby.jdbc.EmbeddedDriver | Apache Derby embedded driver, aka the Java DB |
com.mysql.jdbc.Driver | MySQL |
org.postgresql.Driver | PostgresSQL |
org.hsqldb.jdbcDriver | HSQLDB pure Java database |
org.h2.Driver | H2 pure Java database |
spring.datasource.url: jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:orcl
使用了log4jdbc后,我们只需要在数据源url开头的jdbc后面添加**:log4jdbc**
修改前mysql和oracle的url
spring.datasource.url=jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
修改后
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8
spring.datasource.url=jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:orcl
到这里.我们就可以正常的使用log4jdbc了.
配置logback.xml(不必须)
我们使用了log4jdbc后,我们会明显看到我们日志量翻倍的增长. 这个数据量是非常巨大的. 我们需要设置logback配置文件,从而管理我们的日志.
我们的log4jdbc功能不光是将填充预编译语句的参数和执行时间,它还有其他的功能.
我们在项目src/main/resources下添加logback.xml文件. 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="E://log/" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>