美文网首页springboot
springboot中 log4jdbc+logback的使用

springboot中 log4jdbc+logback的使用

作者: 老街老街 | 来源:发表于2019-06-22 13:17 被阅读6次

    1.什么是log4jdbc以及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 is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system.
    特性:
    完全支持JDBC3和JDBC4
    配置简单,一般情况下你只需要将你的DriverClass改为:net.sf.log4jdbc.DriverSpy,并在你的jdbcUrl之前拼接jdbc:log4
    自动将占位符(?)替换为实际的参数
    能够及时方便地显示SQL的实际执行时间
    显示SQL Connection的数量的信息
    能在JDK1.4+和SLF4J1.X上和大多数常见的JDBC驱动协同工作
    open source

    2.日志系统的选择,logback
    logback是log4j团队创建的开源日志组件。与log4j类似,但是比log4j更强大,是log4j的改良版本。主要优势在于:
    a) 更快的实现,logback内核重写过,是的性能有了很大的提升,内存占用也更小。
    b) logback-classic对slf4j进行了更好的集成
    c) 自动重新加载配置文件,当配置文件修改后,logback-classic能自动重新加载配置文件
    d) 配置文件能够处理不同的情况,开发人员在不同的环境下(开发,测试,生产)切换的时候,不需要创建多个文件,可以通过<if><else><then>标签来实现
    e) 自动压缩已经打出来的日志文件:RollingFileAppender在产生新文件的时候,会自动压缩已经打印出来的日志文件。而且这个压缩的过程是一个异步的过程。

    3.logback与slf4j有什么区别?
    slf4j是一系列的日志接口,而log4j和logback是具体实现了的日志框架。
    a) log4j是apache实现的一个开源日志组件
    b) logback同样是由log4j的作者实现的,拥有更好的特性,是slf4j的原生实现
    4.整合使用
    1)加入jar
    <dependency>
    <groupId>com.googlecode.log4jdbc</groupId>
    <artifactId>log4jdbc</artifactId>
    <version>1.2</version>
    </dependency>
    <dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version>
    </dependency>

    2)application.yml 修改下面两行
    spring:
    datasource:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8

    3)增加资源文件 log4jdbc.log4j2.properties
    log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

    4)增加日志配置文件logback.xml
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>webapp</contextName>

      <!--输出到控制台-->
      <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
          <encoder>
              <pattern>%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)</pattern>
              <charset>utf-8</charset>
          </encoder>
      </appender>
    
      <!--普通日志输出到控制台-->
      <root level="info">
          <appender-ref ref="console" />
      </root>
    
      <!--监控sql日志输出 -->
      <logger name="jdbc.sqlonly" level="INFO" additivity="false">
          <appender-ref ref="console" />
      </logger>
    
      <logger name="jdbc.resultset" level="ERROR" additivity="false">
          <appender-ref ref="console" />
      </logger>
    
      <logger name="jdbc.resultsettable" level="INFO" additivity="false">
          <appender-ref ref="console" />
      </logger>
    
      <logger name="jdbc.connection" level="OFF" additivity="false">
          <appender-ref ref="console" />
      </logger>
    
      <logger name="jdbc.sqltiming" level="OFF" additivity="false">
          <appender-ref ref="console" />
      </logger>
    
      <logger name="jdbc.audit" level="OFF" additivity="false">
          <appender-ref ref="console" />
      </logger>
    

    </configuration>

    5.注意:log4jdbc默认使用的是slf4j作为日志门面,而slf4j具体的日志系统我们可以使用logback,所用我们只要引入
    log4jbdc即可。尤其要记住吗,jdk自带的common-logging和slf4j只是日志的门面(说白了就只提供一些列的API接口),具体使用logback和log4j等日志系统
    还是要取决于我们自己。

    参考:http://www.360doc.com/content/14/0822/02/8072791_403817030.shtml

    相关文章

      网友评论

        本文标题:springboot中 log4jdbc+logback的使用

        本文链接:https://www.haomeiwen.com/subject/augmqctx.html