springboot集成log4jdbc -让SQL日志更加精彩

本文介绍了如何在SpringBoot项目中集成Log4jdbc,以实现更直观的SQL日志显示,包括参数绑定和执行时间。通过在`pom.xml`添加依赖,设置`application.properties`中的数据源配置,以及可选地配置`logback.xml`和`log4jdbc.properties`文件,可以实现对SQL日志的精细管理和控制。Log4jdbc不仅提供预编译语句的参数填充和执行时间,还可以根据配置记录慢查询,并区分不同类型的SQL输出。
摘要由CSDN通过智能技术生成
环境

框架: 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>
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
log4jdbc-log4j2是一个用于在Java应用程序中记录JDBC日志的工具。它可以通过配置文件来指定使用SLF4J作为日志记录器,并且可以通过添加相关的依赖项来集成到项目中。在配置文件中,可以设置log4jdbc.spylogdelegator.name属性为net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator,以告知log4jdbc-log4j2使用SLF4J作为日志记录器。此外,还可以设置log4jdbc.auto.load.popular.drivers属性为false,以禁止自动加载常用的JDBC驱动程序。\[1\]\[3\]如果需要使用log4jdbc-log4j2,还需要在项目的依赖项中添加org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16的依赖项。\[2\] #### 引用[.reference_title] - *1* *2* [使用Log4jdbc-log4j2打印mybatis的sql语句](https://blog.csdn.net/anyincc125/article/details/84904769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [记一个完成的log4jdbc.log4j2 的完整配置](https://blog.csdn.net/m0_67560682/article/details/129310167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值