zoukankan      html  css  js  c++  java
  • Spring Boot 入门之整合 log4jdbc 篇(六)

    博客地址:http://www.moonxy.com

    一、前言

    Spring Data JPA 默认采用 Hibernate 实现。Hibernate 的 showSql 配置只打印 SQL,但并不打印 SQL 参数、执行时间等信息,如果需要这些信息,可以使用第三方工具 log4jdbc 来完成。log4jdbc 是在 jdbc 层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝 sql 到 PLSQL Developer 等客户端直接执行,加快调试速度。

    二、整合 log4jdbc

    2.1 添加依赖

    <!-- log4jdbc -->
    <dependency>
        <groupId>com.googlecode.log4jdbc</groupId>
        <artifactId>log4jdbc</artifactId>
        <version>1.2</version>
        <scope>runtime</scope>
    </dependency>

    2.2 修改数据源配置

    找到我们的数据源配置文件,比如 appliaction.properties,修改 driver 驱动和 url 数据源地址,如下:

    # 修改前
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8
    
    # 修改后
    spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy
    spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8

    2.3 修改日志配置文件

    如果日志采用的是 logback,则添加以下配置,可按照实际需要修改对应条目的日志等级 level:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
        <logger name="jdbc.connection" additivity="false" level="FATAL">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </logger>
        <logger name="jdbc.resultset" additivity="false" level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </logger>
        <logger name="jdbc.audit" additivity="false" level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </logger>
        <logger name="jdbc.sqlonly" additivity="false" level="DEBUG">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </logger>
        <logger name="jdbc.sqltiming" additivity="false" level="DEBUG">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </logger>
    </configuration>

    如果日志采用的是 log4j,还需要添加 slf4j 的依赖,比如下载 log4jdbc的jar 包 log4jdbc-1.2.jar 以及依赖的相关 jar 包 log4j-1.2.17.jar、slf4j-api-1.6.0.jar、slf4j-log4j12-1.7.7.jar,并修改 log4j.properties 或 log4j.xml 配置文件,如下:

    log4j.xml

    <!-- log4j.xml -->
    <logger name="jdbc.sqlonly" level="WARN"/>  
    <logger name="jdbc.sqltiming" level="INFO"/>  
    <logger name="jdbc.resultsettable" level="INFO"/>  
    <logger name="jdbc.resultset" level="WARN"/>  
    <logger name="jdbc.connection" level="WARN"/>  
    <logger name="jdbc.audit" level="WARN"/>
    
    <!-- 根据需要关闭不必要的日志输出 -->
    <logger name="jdbc.connection" level="OFF" />
    <logger name="jdbc.audit" level="OFF" />
    <logger name="jdbc.resultset" level="OFF" />
    <logger name="jdbc.sqlonly" level="OFF" />
    <logger name="jdbc.sqltiming" level="INFO" />
    <logger name="jdbc.resultsettable" level="INFO"/>

    log4j.properties

    # 记录系统执行过的sql语句
    #log4j.additivity.jdbc.sqlonly=true
    log4j.logger.jdbc.sqlonly=DEBUG,console
    # 控制台输出
    log4j.appender.console=org.apache.log4j.ConsoleAppender 
    # 控制台输出格式定义 
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
    # 记录sql执行的时间,可以分析耗时的sql语句
    #log4j.additivity.jdbc.sqltiming=true
    #log4j.logger.jdbc.sqltiming=INFO,console  
    # 记录除了ResultSet外的所有JDBC调用情况,一般不需要
    #log4j.additivity.jdbc.audidt=true
    #log4j.logger.jdbc.audit=INFO,console
    # 记录返回结果集信息
    #log4j.additivity.jdbc.resultset=true
    #log4j.logger.jdbc.resultset=INFO,console
    # 记录数据库连接和释放信息,可记录当前的数据库连接数,便于诊断连接是否释放
    #log4j.additivity.jdbc.connection=true
    #log4j.logger.jdbc.connection=INFO,console

    三、测试验证

    2018-02-05 23:15:24.832  INFO 7956 --- [           main] jdbc.sqltiming                           : 
    insert into user (create_time, department_id, name) values ('02/05/2018 23:15:24.778', 2, 'Jim')

    可以看到日志中显示了执行的完整的 SQL 语句。

  • 相关阅读:
    【剑指offer】数字在排序数组中出现的次数
    移动互联网的架构设计浅谈一
    Android开发中遇到的adb问题解决方法
    Datagrid分页、排序、删除代码
    新辰:关于个人站点安全问题的分析及对策探讨
    Android开发中,activity页面跳转后是空白
    实战——二、c#窗体(2)
    实战——一、c#窗体(1)
    c#的sealed修饰符
    c#中,类的重写中,new和override的区别
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/8421846.html
Copyright © 2011-2022 走看看