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()...来实现

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

相关推荐
斌斌_____20 分钟前
Spring Boot 配置文件的加载顺序
java·spring boot·后端
路在脚下@29 分钟前
Spring如何处理循环依赖
java·后端·spring
苹果醋31 小时前
React系列(八)——React进阶知识点拓展
运维·vue.js·spring boot·nginx·课程设计
海绵波波1071 小时前
flask后端开发(1):第一个Flask项目
后端·python·flask
小奏技术2 小时前
RocketMQ结合源码告诉你消息量大为啥不需要手动压缩消息
后端·消息队列
等一场春雨3 小时前
springboot 3 websocket react 系统提示,选手实时数据更新监控
spring boot·websocket·react.js
荆州克莱3 小时前
Golang的性能监控指标
spring boot·spring·spring cloud·css3·技术
AI人H哥会Java4 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱4 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
赖龙4 小时前
springboot restful mybatis连接mysql返回日期格式不对
spring boot·mybatis·restful