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

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

相关推荐
苹果酱05677 分钟前
windows安装redis, 修改自启动的redis服务的密码
java·开发语言·spring boot·mysql·中间件
feilieren11 分钟前
信创改造 - TongRDS 替换 Redis
java·spring boot·后端
hani199016 分钟前
beikeshop 与swoole结合,让网站打开飞起
后端·swoole
knoci1 小时前
【Go】-go中的锁机制
后端·学习·golang
Mike_188702783511 小时前
深入探索Golang的GMP调度机制:源码解析与实现原理
开发语言·后端·golang
不7夜宵2 小时前
Golang 反射
开发语言·后端·golang
AskHarries2 小时前
Spring Cloud Consul实现选举机制
java·后端·spring cloud·consul
山山而川粤2 小时前
大连环保公益管理系统|Java|SSM|Vue| 前后端分离
java·开发语言·后端·学习·mysql
尘浮生2 小时前
Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
哎呦没2 小时前
企业OA管理系统:Spring Boot技术实现与案例研究
android·spring boot·后端