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

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

相关推荐
ShaneD7714 分钟前
Redis实战: 利用逻辑过期解决缓存击穿
后端
音符犹如代码36 分钟前
深入解析 Apollo:微服务时代的配置管理利器
java·分布式·后端·微服务·中间件·架构
爱敲代码的TOM37 分钟前
大文件上传下载处理方案-断点续传,秒传,分片,合并
后端·大文件处理
长而不宰44 分钟前
使用 Canal实时监听数据库变化
java·数据库·spring boot
计算机毕设指导61 小时前
基于微信小程序的网络安全知识科普平台系统【源码文末联系】
java·spring boot·安全·web安全·微信小程序·小程序·tomcat
2501_921649491 小时前
外汇与贵金属行情 API 集成指南:WebSocket 与 REST 调用实践
网络·后端·python·websocket·网络协议·金融
VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue超市管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
TVtoPP1 小时前
使用StockTV API获取印度股票数据:完整Python实战指南
开发语言·后端·python·金融·数据分析
m0_740043731 小时前
SpringBoot02-SpringMVC入门
java·开发语言·spring boot·spring·mvc
IT_陈寒1 小时前
JavaScript 开发者必知的 7 个 ES2023 新特性,第5个能让代码量减少50%
前端·人工智能·后端