我们在控制台看到的sql语句一般是 没有 自动把参数拼接进去的
所以有时候语句很长 参数很多的时候 手动替换 烦的一批
那现在我就试试 自动拼接参数
首先 引入 架包Log4jdbc-log4j2
Log4jdbc-log4j2是做什么的呢
这个是一个基于jdbc层面的监听工具,可以监听对于数据库的主要操作,从而完美的查看到其中执行的操作。
<!--监听数据库操作-->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
然后新增一个Log4jdbc-log4j2的配置文件
log4jdbc.log4j2.properties
其中的内容主要是
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
下面要去改一下数据库连接设置 要用 Log4jdbc-log4j2连接数据库才能监听操作语句
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
##原来的 driver-class-name: com.mysql.jdbc.Driver
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
##原来的 url: jdbc:mysql://0.0.0.0/exam?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT%2b8&useSSL=false
url: jdbc:log4jdbc:mysql://0.0.0.0/exam?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT%2b8&useSSL=false
username: 用户名
password: 密码
配置完成了 现在运行项目试试吧
控制台已经有东西了
大概有输出的有 jdbc.sqlonly jdbc.sqltiming jdbc.resultset jdbc.resultsettable等
这些事什么意思呢 可以参考一下
jdbc.sqlonly 仅记录SQL。在准备好的语句中执行的SQL会自动显示出来,其绑定参数替换为该位置的绑定数据,从而大大提高了可读性。
jdbc.sqltiming 执行后记录SQL,包括有关SQL执行所需时间的计时统计信息。
jdbc.audit 记录除结果集外的所有JDBC调用。这是非常大量的输出,通常不需要,除非找到特定的JDBC问题。
jdbc.resultset 由于记录了对ResultSet对象的所有调用,因此更加庞大。
jdbc.resultsettable 将jdbc结果记录为表格。级别调试将在结果集中填充未读的值。
jdbc.connection 记录连接打开和关闭事件以及转储所有打开的连接号。这对于解决连接泄漏问题非常有用。
不需要的日志输出 是可以 通过日志配置文件 logback配置去掉的
主要配置看到 控制台日志打印设置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>Spring Boot</contextName>
<property name="log.path" value="/Users/myheart/Documents/logs/exam" />
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>-->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/logs/%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<!--<!–<maxHistory>30</maxHistory>–> 日志数-->
<!--<!–<totalSizeCap>1GB</totalSizeCap>–> 日志文件上限大小-->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--控制台日志打印设置-->
<!--设置为OFF不显示; 留下需要显示的并设置级别-->
<logger name="jdbc.connection" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<logger name="jdbc.resultsettable" level="OFF"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.sqltiming" level="OFF"/>
<logger name="jdbc.sqlonly" level="INFO"/>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- logback为java中的包 -->
<logger name="net.ardour"/>
<!--这里配日志 -->
<logger name="net.ardour" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</logger>
</configuration>
好了 差不多就是这些了 自己赶紧试试去看看 最后的效果吧
如果有什么不懂 或不对的地方请提问或指出