乐趣区

9springcloud整合logback打印sql语句

公众号 java 乐园

Logback 是由 log4j 创始人设计的又一个开源日志组件。logback 当前分成三个模块:logback-core、logback- classic 和 logback-access。logback-core 是其它两个模块的基础模块。logback-classic 是 log4j 的一个 改良版本。此外 logback-classic 完整实现 SLF4J API 使你可以很方便地更换成其它日志系统如 log4j 或 JDK14 Logging。logback-access 访问模块与 Servlet 容器集成提供通过 Http 来访问日志的功能。Logback 是要与 SLF4J 结合起来用的。
Logback 和 log4j 是非常相似的,如果你对 log4j 很熟悉,那对 logback 很快就会得心应手。spring boot 内部使用 Commons Logging 来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如 Java Util Logging,Log4J2 还有 Logback。如果想用某一种日志框架来进行实现的话,就必须先进行配置,默认情况下 spring boot 使用 Logback 作为日志实现的框架。spring boot 从控制台打印出来的日志级别只有 ERROR, WARN 还有 INFO。
(1)如果你想要打印 debug 级别的日志,可以通过 application.yml 文件配置:

debug:
  true

也可以在启动脚本添加参数:

 java -jar d: \sc-xxx.jar --debug

(2)配置 logging.level.* 来具体输出哪些包的日志级别

logging:
level:
root: INFO
org.springframework.web: DEBUG
org.hibernate: ERROR

(3) 将日志输出到文件
默认情况下 spring boot 是不将日志输出到日志文件中,但可以通过在 application.yml 文件中配置 logging.file 文件名称和 logging.path 文件路径,将日志输出到文件

logging:
  path: F:\\springcloudLog
  file: info.log
  level
    root: info

备注:
A、这里若不配置具体的包的日志级别,日志文件信息将为空
B、若只配置 logging.path,那么将会在 F: springcloudLog 文件夹生成一个日志文件为 spring.log(ps:该文件名是固定的,不能更改)。如果 path 路径不存在,会自动创建该文件夹
C、若只配置 logging.file,那将会在项目的当前路径下生成一个 info.log 日志文件。这里可以使用绝对路径如,会自动在 d 盘下创建文件夹和相应的日志文件。

logging:
   file: d:\\ springcloudLog \\info.log

D、logging.path 和 logging.file 同时配置,不会在这个路径有 F: springcloudLog info.log 日志生成,logging.path 和 logging.file 不会进行叠加(要注意)
F、logging.path 和 logging.file 的 value 都可以是相对路径或者绝对路径
这就是基础的日志配置,可以直接在 application.yml 配置,还可以在 classpath 路径下,通过定义具体的日志文件来配置,例如:logback.xml

1、新建项目 sc-eureka-client-provider-logback,对应的 pom.xml 文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>spring-cloud</groupId>
    <artifactId>sc-eureka-client-provider-logback</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>sc-eureka-client-provider-logback</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 说明是一个 eureka client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!-- spring boot 实现 Java Web 服务 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 把 tomcat-jdbc 连接池排除掉,这样 spring-boot 就会寻找是否有 HikariCP 可用 -->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>


        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

    </dependencies>
</project>

可以到默认已经引入 logback 的 jar 包

2、新建 spring boot 启动类 LogbackApplication.java

package sc.provider.logback;

//import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableEurekaClient
@SpringBootApplication
//@MapperScan(basePackages="sc.provider.logback.dao")
public class LogbackApplication {public static void main(String[] args) {SpringApplication.run(LogbackApplication.class, args);
    }
    
}

3、新建配置文件 bootstarp.yml 和 application.yml

bootstarp.yml

server:
  port: 7200

application.yml

spring:
  application:
    name: sc-eureka-client-provider-logback
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/sc?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      minimum-idle: 5
      maximum-pool-size: 15
      auto-commit: true
      idle-timeout: 30000
      pool-name: DatebookHikariCP
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1
 
eureka:
  client:
    registerWithEureka: true #是否将自己注册到 Eureka 服务中,默认为 true
    fetchRegistry: true #是否从 Eureka 中获取注册信息,默认为 true
    serviceUrl:
      defaultZone: http://localhost:5001/eureka/

mybatis:
  mapper-locations: classpath:sc/provider/logback/dao/*.xml
  config-location: classpath:mybatis-config.xml
  type-aliases-package: sc.provider.logback.model
  
logging:
  level:
sc.provider.logback.dao: debug

备注:
可以看到配置文件 application.yml 多了如下配置项

4、项目其他文件如下图

5、启动注册中心 sc-eureka-server 后,启动项目 sc-eureka-client-provider-logback

6、验证 sc-eureka-client-provider-logback 是否启动成功

7、访问相关接口看看是否能打印 sql 语句,例如访问获取用户接口
http://127.0.0.1:7200/user/getUser/3

查看控制台:

源码:


https://gitee.com/hjj520/spring-cloud-2.x/tree/master/sc-eureka-client-provider-logback
退出移动版