SpringCloud/Boot集成LogBack

发布于:2025-03-01 ⋅ 阅读:(11) ⋅ 点赞:(0)

一. 简要介绍

  1. 什么是SLF4J?

官网介绍:
Simple Logging Facade for Java (SLF4J) 充当简单的 各种日志记录框架的 Facade 或抽象 (e.g. java.util.logging、logback、log4j)允许最终用户在部署时插入所需的日志记录框架。

类似java中的接口,如果只集成SLF4J,日志只能输出在控制台,并没有输出到文件的能力,要实现真正的日志能力,需要引入其实现层:比如log4j,log4j2,logback等

  1. 什么是LogBack?

logback是log4j的创始人重新设计研发的升级版“log4j”,遵循log4j相同的设计,但重写改进了底层实现

logback分为三大块:

  • logback-core:模块为其他两个模块的基础。
  • logback-classic:模块可以被看做是log4j的改进版本。此外,logback-classic 本身实现了 SLF4J API,因此可以在 logback 和其他日志框架(如 log4j 或 java.util.logging(JUL))之间来回切换。
  • logback-access:模块与 Servlet 容器(如 Tomcat 和 Jetty)集成,以提供 HTTP 访问日志功能。

二. 依赖引入

如果是非springboot项目,需要引入logback-classic

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

进入logback-classic会发现内部已经引入slf4j-api和logback-core
在这里插入图片描述

如果是springboot/cloud项目,只需要引入spring-boot-starter-web即可

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

我们来看一下为什么

  1. 进入 spring-boot-starter-web 找到 spring-boot-starter
    在这里插入图片描述

  2. 进入 spring-boot-starter 找到 spring-boot-starter-logging
    在这里插入图片描述

  3. 进入 spring-boot-starter-logging 找到 logback-classic
    在这里插入图片描述

  4. 进入 logback-classic 找到 slf4j-api和logback-core
    在这里插入图片描述

三. yml文件配置

开发/测试环境打开mybatis日志

mybatis-plus:
  global-config:
    configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

四. logback-spring.xml文件配置

在springboot项目/springcloud每个模块 的resources下创建 logback-spring.xml文件

要修改一下log.name,推荐logs/项目名称,如果是微服务项目,推荐logs/模块名称
按需选择是否注释修改最后面的不同环境的日志级别配置:开发环境推荐debug级别,生产环境推荐info级别

如果是微服务项目,把logback-spring.xml在每一个模块下的resources都添加一份,把log.name修改一下即可

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>
       <!--必须修改:改成你的日志文件名,下面配置表示:在项目启动目录下,创建个logs文件夹,并将日志写入到demo.log文件中-->
    <property name="log.name" value="logs/这里改为模块名称"/>

    <!--输出到控制台 ConsoleAppender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

  <!--必须要配置:下面配置含义,当单个日志文件大小超过100M后,会生成新日志文件,并将旧其按日志进行打包压缩,当日志总大小超过10G或者日志时间超过7天,就吧最老的日志删除,避免日志撑爆服务器硬盘导致服务器宕机-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.name}.log</file>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${log.name}.%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
            <!-- 单个日志文件最多 100MB -->
            <maxFileSize>100MB</maxFileSize>
            <!--只保留最近7天的日志-->
            <maxHistory>7</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
        </encoder>
    </appender>

<!--  <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>-->

    <logger name="org.springframework" level="warn"/>

    <springProfile name="local">
        <!-- 打印mybatis日志 -->
        <logger name="cn.enn.smart.mapper" level="debug"/>
        <root level="info">
            <appender-ref ref="console"/>
            <!--本地环境时,不写入日志文件 -->
        </root>
    </springProfile>

    <springProfile name="dev">
        <!-- 打印mybatis日志 -->
        <logger name="cn.enn.smart.mapper" level="debug"/>
        <root level="debug">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

    <springProfile name="test">
        <!-- 打印mybatis日志 -->
        <logger name="cn.enn.smart.mapper" level="debug"/>
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

    <springProfile name="pro">
        <!-- 打印mybatis日志 -->
        <logger name="cn.enn.smart.mapper" level="debug"/>
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    </springProfile>

</configuration>

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到