Logback 日志介绍及与Spring Boot 的整合 【保姆级教程】

Logback介绍

Logback是SpringBoot框架的默认的日志,内容如下图所示:

Log4J 的创始人 Ceki Gülcü 和另一位 Log4J 贡献者 Sébastien Pennec 设计了 ​​logback。他们设计的 Logback 具有快速和通用的特性,可以在不同的环境下工作。

Logback 由三个模块组成:
logback-core :构成 logback-classic 和 logback-access 的基础。要执行日志记录,需要 logback-classic 或 logback-access。
logback-classic :依靠 logback-core 提供日志记录服务。
logback-access :为 servlet 容器(如 Tomcat 和 Jetty)提供 HTTP 访问日志功能。

Logback 原生实现了 Java 的简单日志外观 (SLF4J) API。

简而言之,SLF4J 是各种日志框架的外观。开发人员可针对SLF4J API 编写日志代码。在部署时灵活地插入所需的日志框架。

由于 logback 原生实现了 SLF4J,因此额外的 SLF4J API 层不会产生任何性能开销,这是 Logback 相对于其他框架的一点优势。

Logback 支持 TRACEDEBUGINFOWARNERROR 五种级别

在本地开发时,通常将日志级别设置为 DEBUG。这将提供详细的日志消息以供开发者使用。部署到生产环境时,通常将日志级别设置为 ERROR,这是为了避免日志中充斥过多的调试信息。

使用方法

spring-boot-starter-web自动包含 Logback 相关依赖,因此在pom.xml文件中添加如下依赖即可

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

resources目录下创建logback-spring.xml文件

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
    <jmxConfigurator/>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    <!--这个属性设置了应用名称,用于在日志文件名中生成特定的前缀,可以根据项目名称修改为其他名称(注意下面的引用也要一起更改)-->
    <property scope="context" name="appName(可以改)" value="weblog(这里可根据需要更改)" />
    <!-- 自定义日志输出路径,以及日志名称前缀 -->
    <property name="LOG_FILE" value="/app/weblog/logs/${appName}.%d{yyyy-MM-dd}"/>
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
    <!--<property name="CONSOLE_LOG_PATTERN" value="${FILE_LOG_PATTERN}"/>-->

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 日志文件输出的文件名 -->
        <FileNamePattern>${LOG_FILE}-%i.log</FileNamePattern>
        <!-- 日志文件保留天数 -->
        <MaxHistory>30</MaxHistory>
        <!-- 日志文件最大的大小 -->
        <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>10MB</maxFileSize>
        </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度 %errorMessage:日志消息,%n 是换行符-->
        <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- dev 环境(仅输出到控制台) -->
    <springProfile name="dev">
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
        <root level="info">
            <appender-ref ref="CONSOLE" />
        </root>
    </springProfile>

    <!-- prod 环境(仅输出到文件中) -->
    <springProfile name="prod">
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    </springProfile>
</configuration>

我们可以在applilcation.yml配置文件设置日志级别。比如设置成warn级别,warn以下的部分都不会显示【我在开发环境一般不会设置这个部分】

java 复制代码
logging:
  level:
    root: warn

使日志生效的配置放到 application-prod.yml ,即生产文件中即可:

java 复制代码
logging:
  config: classpath:logback-spring.xml

可在application.yml中配置当前环境是生产环境还是开发环境

java 复制代码
spring:
  profiles:
    # 激活 dev 环境
    active: dev

将dev改为prod,环境便进行了更改

java 复制代码
spring:
  profiles:
    # 激活 prod 环境
    active: prod

以下内容为logback-spring.xml中的部分,这个部分指定了开发环境设置为控制台输出,而生产环境设置为文件输出

java 复制代码
    <!-- dev 环境(仅输出到控制台) -->
    <springProfile name="dev">
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
        <root level="info">
            <appender-ref ref="CONSOLE" />
        </root>
    </springProfile>

    <!-- prod 环境(仅输出到文件中) -->
    <springProfile name="prod">
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    </springProfile>

生产环境时,以下部分的内容进行路径更改,可以输入日志文件到目标路径里

使用示例

比如这个自定义的全局处理异常中,设定了捕获到其他异常后,控制台输出的内容,使用log.error()...来实现

在进行异常处理的时候,可以进行使用。

相关推荐
invicinble28 分钟前
对于springboot
java·spring boot·后端
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-知识点管理模块完整优化方案
java·前端·人工智能·spring boot
码界奇点1 小时前
基于Spring Boot与Vue的校园后台管理系统设计与实现
vue.js·spring boot·后端·毕业设计·源代码管理
J_liaty1 小时前
基于EasyExcel实现文件导入导出功能
spring boot·easyexcel
爱编程的小庄1 小时前
Rust 发行版本及工具介绍
开发语言·后端·rust
未若君雅裁1 小时前
SpringBoot2.x与SpringBoot3.x自动配置注册的差异
java·spring boot
码界奇点2 小时前
基于前后端分离架构的智能面试刷题系统设计与实现
spring boot·面试·职场和发展·架构·毕业设计·源代码管理
晴天飛 雪2 小时前
Spring Boot 接口耗时统计
前端·windows·spring boot
Apifox.2 小时前
测试用例越堆越多?用 Apifox 测试套件让自动化回归更易维护
运维·前端·后端·测试工具·单元测试·自动化·测试用例